Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Aktualizowanie wartości ciągów w tabeli, która ma być przerzucana, takich jak ciąg YYYYMMDD do ciągu MMDDYYYY

Zakładając, że nasza kolumna daty to char lub varchar , możesz zrobić coś takiego

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

Albo to

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

Jeśli chcesz tylko wyświetlać Twój tekst inaczej, najłatwiej jest

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

Lub utwórz widok i użyj go zamiast oryginalnej tabeli:

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

Ale jeśli używasz rzeczywistych typów danych daty/godziny, użytkownicy Twoich danych otrzymają je zmapowane do odpowiednich typów daty/godziny w kliencie, a następnie będą mogli wybrać, jak najlepiej je wyświetlić dla swoich potrzeb.

Inną zaletą używania typów daty/godziny jest to, że wymuszają integrację danych . Poczekaj, aż ktoś doda lub zmieni datę, aby uczynić ją nieważną — powiedzmy „20142331”. Następnie, gdy będziesz musiał wyświetlić te dane w formularzu z nazwą miesiąca (np. „22 stycznia 2014 r.), wesołość pojawi się, gdy otrzymasz wyjątek podczas próby zmapowania numeru miesiąca na nazwę miesiąca.

Jeśli nie zamierzasz używać typu daty/godziny, przechowuj osobno rok, miesiąc i dzień jako wartości całkowite z odpowiednimi ograniczeniami sprawdzającymi, aby wymusić integralność:

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. Zgodność z RODO a Twój serwer SQL

  2. Jak usunąć wszystkie klucze podstawowe ze wszystkich tabel w bazie danych SQL Server — część samouczka SQL Server / TSQL 65

  3. Zduplikowane wyniki podczas wykonywania INNER JOIN

  4. Wpływ aplikacji na migrację z serwera sql 2005 do 2008

  5. Wewnętrzne łączenie trzech stołów