sql >> Database teknologi >  >> RDS >> Sqlserver

Opdatering af strengværdier i en tabel, der skal floppes rundt, såsom ÅÅÅÅMMDD streng til MMDDÅÅÅÅ streng

Vi antager, at vores datokolonne er char eller varchar , du kunne gøre sådan noget her

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

Eller denne

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

Hvis alt du vil gøre er at vise din tekst anderledes, den nemmeste måde er

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

Eller opret en visning og brug den i stedet for den originale tabel:

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

Men hvis du bruger faktiske dato/klokkeslæt datatyper, vil brugere af dine data få dem kortlagt til passende dato/klokkeslæt typer i klienten og kan derefter vælge, hvordan de bedst vises til deres behov.

Den anden fordel ved at bruge dato/klokkeslæt typer er, at de håndhæver dataintegritet . Vent, indtil nogen tilføjer eller ændrer en dato for at gøre den ugyldig - f.eks. `20142331'. Så, når du skal vise disse data i en formular med et månedsnavn (f.eks. '22. jan. 2014), vil der opstå munterhed, når du får en undtagelse, der forsøger at knytte månedsnummeret til et månedsnavn.

Hvis du ikke vil bruge en dato/klokkeslætstype, skal du gemme år, måned og dag individuelt som heltalsværdier med passende kontrolbegrænsninger for at håndhæve integritet:

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. Hvad er forskellen mellem mysqli_affected_rows og mysqli_num_rows?

  2. Oracle Replace funktion

  3. Kan jeg parametrisere tabelnavnet i en forberedt erklæring?

  4. SQL:Hent produkter fra en kategori, men skal også være i et andet sæt kategorier