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