sql >> Databasteknik >  >> RDS >> Database

Hur man formaterar ett datum i T-SQL

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:

  1. Den nya datatypen (i vårt exempel, NVARCHAR).
  2. Ett uttryck eller kolumnnamn som innehåller datumet som ska formateras (i vårt exempel, start_date kolumn).
  3. 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.


  1. SQL Server dynamisk PIVOT-fråga?

  2. Konvertera textvärde i SQL Server från UTF8 till ISO 8859-1

  3. MariaDB JSON_TYPE() Förklarad

  4. Finns det ett ANSI SQL-alternativ till nyckelordet MYSQL LIMIT?