Problem:
Du vill ändra formatet för ett datumfält eller värde i en SQL Server-databas.
Exempel:
Vår databas har en tabell som heter Patient
med data i kolumnerna Id
, FirstName
, LastName
och RegistrationDate
.
Id | Förnamn | Efternamn | Registreringsdatum |
---|---|---|---|
1 | Jane | Williams | 2019-06-20 |
2 | Gabriel | Brun | 2019-02-02 |
3 | Lora | Folk | 2016-11-05 |
Låt oss ändra formatet för varje patients registreringsdatum. Vi sätter veckodagens namn först, följt av månadens dag och namn samt ett 4-siffrigt årtal (t.ex. "fredag 27 december 2019").
Lösning:
Vi använder FORMAT()-funktionen för att ändra formatet på datumet i RegistrationDate
kolumn.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy') AS FormattedRegistrationDate FROM Patient;
Här är resultatet av frågan:
Förnamn | Efternamn | Formaterat registreringsdatum |
---|---|---|
Jane | Williams | Torsdag 20 juni 2019 |
Gabriel | Brun | Lördag 2 februari 2019 |
Lora | Folk | Lördagen den 5 november 2016 |
Diskussion:
Vi kan ändra hur ett givet datum visas med FORMAT()-funktionen. Denna funktion tar två obligatoriska argument och ett valfritt argument. I vårt exempel använde vi bara de två obligatoriska argumenten. Den första är ett datum, som kan komma från en kolumn för datum/tid/datumtid eller något uttryck som returnerar ett datum eller en tid. (I vårt exempel använder vi kolumnen RegistrationDate
.) Det andra argumentet är en sträng som innehåller det nya datumformatet. I vårt exempel använde vi 'dddd, dd MMMM, åååå' :
- dddd – Namnet på veckodagen.
- d – Dagen i månaden, från 1 till 31.
- MMMM – Månadens fullständiga namn.
- åååå – Det fyrsiffriga året.
Tabellen nedan visar fler datum-/tidsformatspecifikationer:
specificator | beskrivning |
---|---|
d | Dag i intervallet 1-31 |
dd | Dag i intervallet 01-31 |
ddd | Veckodagens förkortade namn |
dddd | Veckodagens fullständiga namn |
M | Månad från 1 till 12 |
MM | Månad från 01 till 12 |
MMM | Månadens förkortade namn |
MMMM | Månadens fullständiga namn |
y | 2-siffrigt år, från 0 till 99 |
åå | 2-siffrigt år från 00 till 99 |
åååå | 4-siffrigt år |
g | Era (t.ex. A.D.) |
h | Timme från 1 till 12 (12-timmars klocka) |
hh | Timme från 01 till 12 (12-timmars klocka) |
H | Timmar från 0 till 23 (24-timmars klocka) |
HH | Timme från 00 till 23 (24-timmars klocka) |
m | Minut från 0 till 59 |
mm | Minut från 00 till 59 |
s | Andra från 0 till 59 |
ss | Andra från 00 till 59 |
t | Första tecknet i AM eller PM (t.ex. 9A, 5P) |
tt | AM eller PM |
z | Timmars förskjutning, utan inledande nolla (t.ex. +3) |
zz | Timmars förskjutning, med inledande noll (t.ex. +03) |
Du kan läsa mer i Microsofts dokumentation för standardformat för datum och tid och anpassade format.
Om du vill formatera detta datum för ett specifikt språk och/eller land, använd det tredje valfria argumentet:kultur . Detta argument är en sträng som innehåller kulturkoden för en viss region eller land. (Kulturkoder består av en språkkod, ett bindestreck och en landskod.) I exemplet nedan använder vi kulturkoden för Tyskland, som kombinerar den tyska språkkoden ('de') med landskoden för Tyskland ('DE'), d.v.s. 'de-DE'. Det resulterande datumet visas på tyska och formaterat som en tysk publik förväntar sig att se det.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy', 'de-DE') AS FormattedRegistrationDate FROM Patient;
Här är resultatet av den här frågan:
Förnamn | Efternamn | Registreringsdatum |
---|---|---|
Jane | Williams | Donnerstag, 20 juni 2019 |
Gabriel | Brun | Samstag, 2 februari 2019 |
Lora | Folk | Samstag, 5 november 2016 |