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_datekolonne). - 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.