Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Актуализиране на низови стойности в таблица, които трябва да се променят, като низ ГГГГММДД до низ ММДДГГГГ

Ако приемем, че нашата колона за дата е char или varchar , можете да направите нещо подобно

update foo
set dates = right(dates,4) + left(dates,4)

Или това

update foo
set dates = replace( convert(varchar,convert(datetime,dates,112),110) , '-' , '' )

Ако всичко, което искате да направите, е показване вашия текст по различен начин, най-лесният начин е

select ... ,
       dates = right(dates,4) + left(dates,4)
from foo

Или създайте изглед и го използвайте вместо оригиналната таблица:

create view foo_view
as select id ,
          dates = right(dates,4) + left(dates,4)
   from foo

Но ако използвате действителни типове данни за дата/час, потребителите на вашите данни ще ги насочат към подходящи типове дата/час в клиента и след това могат да изберат как най-добре да ги покажат за своите нужди.

Другото предимство на използването на типове дата/час е, че те налагат целостта на данните . Изчакайте, докато някой добави или промени дата, за да я направи невалидна – да речем „20142331“. След това, когато трябва да покажете тези данни във формуляр с име на месец („22 януари 2014 г., да речем), ще настъпи веселие, когато получите изключение, опитвайки се да съпоставите номера на месеца с името на месец.

Ако няма да използвате тип дата/час, тогава запазете година, месец и ден поотделно като цели числа с подходящи ограничения за проверка, за да наложите целостта:

create table foo
(
  id   int not null identity(1,1) primary key ,
  yyyy int not null check ( yyyy between 1900 and 2100 ) ,
  mm   int not null check ( mm between 1 and 12 ) ,
  dd   int not null check ( dd between 1 and ( case mm
                                                 when  4 then 30
                                                 when  6 then 30
                                                 when  9 then 30
                                                 when 11 then 30
                                                 when  2 then case
                                                                when yyyy % 400 = 0 then 29
                                                                when yyyy % 100 = 0 then 28
                                                                when yyyy % 4   = 0 then 29
                                                                else                     28
                                                              end
                                                 else 31
                                               end
                                             )
                          )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се промени паролата на sa в SQL Server 2008

  2. Разрешение за запитване към dbo.sysobjects

  3. Как мога да вляза и да намеря най-скъпите заявки?

  4. Как да деактивирате всички ограничения за проверка и външни ключове за таблица в SQL Server (примери за T-SQL)

  5. Вътрешни елементи на SQL Server:Планово кеширане, т. I – Планове за повторно използване