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 |