sql >> Databasteknik >  >> RDS >> Sqlserver

Uppdatera strängvärden i en tabell som ska floppas runt, till exempel ÅÅÅÅMMDD sträng till MMDDYYYY sträng

Förutsatt att vår datumkolumn är char eller varchar , du kan göra något sånt här

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

Eller det här

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

Om allt du vill göra är att visa din text annorlunda, det enklaste sättet är

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

Eller skapa en vy och använd den istället för den ursprungliga tabellen:

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

Men om du använder faktiska datum/tid datatyper, kommer användare av din data att få dem mappade till lämpliga datum/tid typer i klienten och kan sedan välja hur de bäst ska visas för deras behov.

Den andra fördelen med att använda datum/tid-typer är att de upprätthåller dataintegritet . Vänta tills någon lägger till eller ändrar ett datum för att göra det ogiltigt - säg "20142331". Sedan, när du behöver visa den informationen i ett formulär med ett månadsnamn (säg 22 januari 2014), kommer det att uppstå munterhet när du får ett undantag som försöker mappa månadsnumret till ett månadsnamn.

Om du inte tänker använda en datum/tid-typ, lagra sedan år, månad och dag individuellt som heltalsvärden med lämpliga kontrollbegränsningar för att upprätthålla 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. Att konvertera mysql-tabell till sparkdatauppsättning är mycket långsam jämfört med samma från csv-fil

  2. Hur kan jag få senast infogade ID med Hibernate

  3. Hur man använder JSTL sql-taggen

  4. Skapa MySQL-funktion i Laravel 5.5