Ervan uitgaande dat onze datumkolom char
. is of varchar
, zou je zoiets kunnen doen
update foo
set dates = right(dates,4) + left(dates,4)
Of dit
update foo
set dates = replace( convert(varchar,convert(datetime,dates,112),110) , '-' , '' )
Als u alleen maar wilt weergeven uw tekst anders, de gemakkelijkste manier is
select ... ,
dates = right(dates,4) + left(dates,4)
from foo
Of maak een weergave en gebruik die in plaats van de originele tabel:
create view foo_view
as select id ,
dates = right(dates,4) + left(dates,4)
from foo
Maar als u werkelijke datum-/tijdgegevenstypes gebruikt, zullen gebruikers van uw gegevens deze toegewezen krijgen aan geschikte datum-/tijdtypes in de client en kunnen ze vervolgens kiezen hoe ze het beste kunnen worden weergegeven voor hun behoeften.
Het andere voordeel van het gebruik van datum/tijd-typen is dat ze gegevensintegriteit afdwingen . Wacht tot iemand een datum toevoegt of wijzigt om deze ongeldig te maken, bijvoorbeeld '20142331'. Wanneer u die gegevens vervolgens moet weergeven in een formulier met een maandnaam (zeg 22 januari 2014), ontstaat er hilariteit wanneer u een uitzondering krijgt die probeert het maandnummer toe te wijzen aan een maandnaam.
Als u geen datum/tijd-type gaat gebruiken, sla dan jaar, maand en dag afzonderlijk op als gehele waarden met geschikte controlebeperkingen om integriteit af te dwingen:
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
)
)