Problem:
Du vil gerne vise en datoværdi i et andet format i SQL Server.
Eksempel:
Vores database har en tabel ved navn company
med data i kolonnerne id (primær nøgle), navn og startdato .
id | navn | startdato |
---|---|---|
1 | Lisa Bank | 2019-01-20 |
2 | Credit Financial Institute | 2018-03-14 |
3 | Williams Holding | 2019-10-28 |
Lad os for hver virksomhed konvertere deres startdato til et nyt format, 'ÅÅÅÅ/MM/DD', hvor ÅÅÅÅ er et 4-cifret år, MM er en 2-cifret måned, og DD er en 2-cifret dag.
Løsning 1:
Vi bruger CONVERT()
fungere. Her er den forespørgsel, du ville skrive:
SELECT CONVERT(NVARCHAR, start_date, 111 ) AS new_date FROM company;
Her er resultatet:
navn | startdato |
---|---|
Lisa Bank | 2019/01/20 |
Credit Financial Institute | 2018/03/14 |
Williams Holding | 2019/10/28 |
Diskussion:
Brug CONVERT()
funktion til at ændre formatet på en dato fra en given kolonne eller et givet udtryk.
Denne funktion tager tre argumenter:
- Den nye datatype (i vores eksempel, NVARCHAR).
- Et udtryk eller kolonnenavn, der indeholder datoen, der skal formateres (i vores eksempel,
start_date
kolonne). - En valgfri stilkode, som et heltal. (I vores eksempel viser "111"-stilen datoen ved hjælp af skråstreger for at adskille delene.)
Tabellen nedenfor viser de mest populære datostilkoder:
kode | beskrivelse |
---|---|
101 | 30/11/2019 |
102 | 2019.11.30 |
103 | 30/11/2019 |
104 | 30.11.2019 |
105 | 30-11-2019 |
110 | 30-11-2019 |
111 | 2019/11/30 |
En omfattende liste over formatformater kan findes i T-SQL-dokumentationen.
Forespørgslen ovenfor ændrede formatet på Lisa Banks dato 2019-01-20 til en streng, der indeholder datoen "2019/01/20".
Løsning 2:
I SQL Server 2012 og nyere kan du bruge FORMAT()
funktion til at ændre dato/tidsformater. Du bruger tegnene nedenfor til at angive det ønskede format:
mønster | beskrivelse |
---|---|
dd | dag i området 01-31 |
MM | måned i intervallet 01-12 |
åå | 2-cifret årstal |
åååå | 4-cifret årstal |
HH | time i området 00-23 |
mm | minutter i området 00-59 |
ss | sekunder i området 00-59 |
Her er den forespørgsel, du ville skrive ved hjælp af FORMAT():
SELECT FORMAT(start_date, ‘yyyy-MM-dd’ ) AS new_date FROM company;
Det første argument er dato/dato/tidsværdien, der skal omformateres. Den anden er en streng, der indeholder mønsteret i det nye format. Denne funktion returnerer en NVARCHAR-datatype. Brug FORMAT()
hvis du arbejder på SQL Server 2012 eller nyere og ønsker at konvertere datoer/klokkeslæt til strenge, der indeholder de formaterede datoer/klokkeslæt.