Problem:
Du vill visa ett datumvärde i ett annat format i SQL Server.
Exempel:
Vår databas har en tabell som heter company
med data i kolumnerna id (primär nyckel), namn och startdatum .
id | namn | startdatum |
---|---|---|
1 | Lisa Bank | 2019-01-20 |
2 | Credit Financial Institute | 2018-03-14 |
3 | Williams Holding | 2019-10-28 |
För varje företag, låt oss konvertera deras startdatum till ett nytt format, "ÅÅÅÅ/MM/DD", där ÅÅÅÅ är ett 4-siffrigt år, MM är en 2-siffrig månad och DD är en 2-siffrig dag.
Lösning 1:
Vi använder CONVERT()
fungera. Här är frågan du skulle skriva:
SELECT CONVERT(NVARCHAR, start_date, 111 ) AS new_date FROM company;
Här är resultatet:
namn | startdatum |
---|---|
Lisa Bank | 2019/01/20 |
Credit Financial Institute | 2018/03/14 |
Williams Holding | 2019/10/28 |
Diskussion:
Använd CONVERT()
funktion för att ändra formatet för ett datum från en viss kolumn eller uttryck.
Denna funktion tar tre argument:
- Den nya datatypen (i vårt exempel, NVARCHAR).
- Ett uttryck eller kolumnnamn som innehåller datumet som ska formateras (i vårt exempel,
start_date
kolumn). - En valfri stilkod, som ett heltal. (I vårt exempel visar stilen "111" datumet med snedstreck för att separera delarna.)
Tabellen nedan visar de mest populära datumstilskoderna:
kod | beskrivning |
---|---|
101 | 11/30/2019 |
102 | 2019.11.30 |
103 | 30/11/2019 |
104 | 30.11.2019 |
105 | 30-11-2019 |
110 | 11-30-2019 |
111 | 2019/11/30 |
En omfattande lista över formatstilar finns i T-SQL-dokumentationen.
Frågan ovan ändrade formatet för Lisa Banks datum 2019-01-20 till en sträng som innehåller datumet "2019/01/20".
Lösning 2:
I SQL Server 2012 och senare kan du använda FORMAT()
funktion för att ändra datum/tidsformat. Du använder tecknen nedan för att ange önskat format:
mönster | beskrivning |
---|---|
dd | dag inom intervallet 01-31 |
MM | månad inom intervallet 01-12 |
åå | 2-siffrigt år |
åååå | 4-siffrigt år |
HH | timme inom intervallet 00-23 |
mm | minuter inom intervallet 00-59 |
ss | sekunder i intervallet 00-59 |
Här är frågan du skulle skriva med FORMAT():
SELECT FORMAT(start_date, ‘yyyy-MM-dd’ ) AS new_date FROM company;
Det första argumentet är datetime/date/time-värdet som ska formateras om. Den andra är en sträng som innehåller mönstret för det nya formatet. Denna funktion returnerar en NVARCHAR-datatyp. Använd FORMAT()
om du arbetar på SQL Server 2012 eller senare och vill konvertera datum/tider till strängar som innehåller formaterade datum/tider.