sql >> Databáze >  >> RDS >> Sqlserver

Aktualizace řetězcových hodnot v tabulce, které se mají převrátit, jako je řetězec RRRRMMDD na řetězec MMDDYYYY

Za předpokladu, že náš sloupec data je char nebo varchar , můžete udělat něco takového

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

Nebo toto

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

Pokud vše, co chcete udělat, je zobrazit váš text jinak, nejjednodušší způsob je

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

Nebo vytvořte pohled a použijte jej místo původní tabulky:

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

Pokud ale použijete skutečné datové typy data/času, uživatelé vašich dat je namapují na vhodné typy data/času v klientovi a pak si mohou vybrat, jak je nejlépe zobrazit pro své potřeby.

Další výhodou použití typů data/času je, že vynucují integritu dat . Počkejte, až někdo přidá nebo nezmění datum, aby bylo neplatné – řekněme „20142331“. Když pak potřebujete zobrazit tato data ve formuláři s názvem měsíce (řekněme 22. ledna 2014), bude veselo, když dostanete výjimku při pokusu o mapování čísla měsíce na název měsíce.

Pokud nehodláte používat typ data/času, uložte rok, měsíc a den jednotlivě jako celočíselné hodnoty s vhodnými kontrolními omezeními, abyste zajistili integritu:

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. JPA search String, Long a Boolean

  2. Jak můžete zobrazit nulu v řadě pomocí dynamiky roku a měsíce v intervalu?

  3. MySQL:jak třídit slova v řetězci pomocí uložené funkce?

  4. Getting Error Připojte se k Oracle pomocí Pythonu na Macu – Nelze najít klientskou knihovnu Oracle