Problem:
Du vil gerne ændre formatet på et datofelt eller en værdi i en SQL Server-database.
Eksempel:
Vores database har en tabel med navnet Patient
med data i kolonnerne Id
, FirstName
, LastName
og RegistrationDate
.
Id | Fornavn | Efternavn | Registreringsdato |
---|---|---|---|
1 | Jane | Williams | 2019-06-20 |
2 | Gabriel | Brun | 2019-02-02 |
3 | Lora | Folke | 2016-11-05 |
Lad os ændre formatet for hver patients registreringsdato. Vi sætter navnet på ugedagen først efterfulgt af månedens dag og navn og et 4-cifret årstal (f.eks. "fredag den 27. december 2019").
Løsning:
Vi bruger funktionen FORMAT() til at ændre formatet på datoen i RegistrationDate
kolonne.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy') AS FormattedRegistrationDate FROM Patient;
Her er resultatet af forespørgslen:
Fornavn | Efternavn | Formateret registreringsdato |
---|---|---|
Jane | Williams | Torsdag den 20. juni 2019 |
Gabriel | Brun | Lørdag den 2. februar 2019 |
Lora | Folke | Lørdag den 5. november 2016 |
Diskussion:
Vi kan ændre, hvordan en given dato vises med FORMAT()-funktionen. Denne funktion tager to obligatoriske argumenter og et valgfrit argument. I vores eksempel brugte vi kun de to obligatoriske argumenter. Den første er en dato, som kan være fra en dato/tid/datotid-kolonne eller ethvert udtryk, der returnerer en dato eller et klokkeslæt. (I vores eksempel bruger vi kolonnen RegistrationDate
.) Det andet argument er en streng, der indeholder det nye datoformat. I vores eksempel brugte vi 'dddd, dd MMMM, åååå' :
- dddd – Navnet på ugedagen.
- d – Dagen i måneden, fra 1 til 31.
- MMMM – Månedens fulde navn.
- åååå – Det firecifrede årstal.
Tabellen nedenfor viser flere dato-/tidsformatspecifikationer:
specificator | beskrivelse |
---|---|
d | Dag i intervallet 1-31 |
dd | Dag i intervallet 01-31 |
ddd | Ugedagens forkortede navn |
dddd | Ugedagens fulde navn |
M | Måned fra 1 til 12 |
MM | Måned fra 01 til 12 |
MMM | Månedens forkortede navn |
MMMM | Månedens fulde navn |
y | 2-cifret år, fra 0 til 99 |
åå | 2-cifret år fra 00 til 99 |
åååå | 4-cifret årstal |
g | Era (f.eks. A.D.) |
h | Time fra 1 til 12 (12-timers ur) |
hh | Time fra 01 til 12 (12-timers ur) |
H | Time fra 0 til 23 (24-timers ur) |
HH | Time fra 00 til 23 (24-timers ur) |
m | Minut fra 0 til 59 |
mm | Minut fra 00 til 59 |
s | Sekund fra 0 til 59 |
ss | Sekund fra 00 til 59 |
t | Første tegn i AM eller PM (f.eks. 9A, 5P) |
tt | AM eller PM |
z | Timeforskydning uden indledende nul (f.eks. +3) |
zz | Timeforskydning med indledende nul (f.eks. +03) |
Du kan lære mere i Microsoft-dokumentationen for standard dato- og tidsformater og brugerdefinerede formater.
Hvis du gerne vil formatere denne dato for et specifikt sprog og/eller land, skal du bruge det tredje valgfrie argument:kultur . Dette argument er en streng, der indeholder kulturkoden for en bestemt region eller land. (Kulturkoder består af en sprogkode, en bindestreg og en landekode.) I eksemplet nedenfor bruger vi kulturkoden for Tyskland, som kombinerer den tyske sprogkode ('de') med landekoden for Tyskland ('DE'), dvs. 'de-DE'. Den resulterende dato vises på tysk og formateret som et tysk publikum ville forvente at se det.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy', 'de-DE') AS FormattedRegistrationDate FROM Patient;
Her er resultatet af denne forespørgsel:
Fornavn | Efternavn | Registreringsdato |
---|---|---|
Jane | Williams | Donnerstag, 20. juni, 2019 |
Gabriel | Brun | Samstag, 2. februar 2019 |
Lora | Folke | Samstag, 5. november 2016 |