sql >> Databasteknik >  >> RDS >> Database

Hur man ändrar datum- och tidsformat i T-SQL

Problem:

Du vill ändra formatet för ett datumfält eller värde i en SQL Server-databas.

Exempel:

Vår databas har en tabell som heter Patient med data i kolumnerna Id , FirstName , LastName och RegistrationDate .

Id Förnamn Efternamn Registreringsdatum
1 Jane Williams 2019-06-20
2 Gabriel Brun 2019-02-02
3 Lora Folk 2016-11-05

Låt oss ändra formatet för varje patients registreringsdatum. Vi sätter veckodagens namn först, följt av månadens dag och namn samt ett 4-siffrigt årtal (t.ex. "fredag ​​27 december 2019").

Lösning:

Vi använder FORMAT()-funktionen för att ändra formatet på datumet i RegistrationDate kolumn.

SELECT  FirstName,
        LastName,
        FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy')
          AS FormattedRegistrationDate
FROM Patient;

Här är resultatet av frågan:

Förnamn Efternamn Formaterat registreringsdatum
Jane Williams Torsdag 20 juni 2019
Gabriel Brun Lördag 2 februari 2019
Lora Folk Lördagen den 5 november 2016

Diskussion:

Vi kan ändra hur ett givet datum visas med FORMAT()-funktionen. Denna funktion tar två obligatoriska argument och ett valfritt argument. I vårt exempel använde vi bara de två obligatoriska argumenten. Den första är ett datum, som kan komma från en kolumn för datum/tid/datumtid eller något uttryck som returnerar ett datum eller en tid. (I vårt exempel använder vi kolumnen RegistrationDate .) Det andra argumentet är en sträng som innehåller det nya datumformatet. I vårt exempel använde vi 'dddd, dd MMMM, åååå' :

  • dddd – Namnet på veckodagen.
  • d – Dagen i månaden, från 1 till 31.
  • MMMM – Månadens fullständiga namn.
  • åååå – Det fyrsiffriga året.

Tabellen nedan visar fler datum-/tidsformatspecifikationer:

specificator beskrivning
d Dag i intervallet 1-31
dd Dag i intervallet 01-31
ddd Veckodagens förkortade namn
dddd Veckodagens fullständiga namn
M Månad från 1 till 12
MM Månad från 01 till 12
MMM Månadens förkortade namn
MMMM Månadens fullständiga namn
y 2-siffrigt år, från 0 till 99
åå 2-siffrigt år från 00 till 99
åååå 4-siffrigt år
g Era (t.ex. A.D.)
h Timme från 1 till 12 (12-timmars klocka)
hh Timme från 01 till 12 (12-timmars klocka)
H Timmar från 0 till 23 (24-timmars klocka)
HH Timme från 00 till 23 (24-timmars klocka)
m Minut från 0 till 59
mm Minut från 00 till 59
s Andra från 0 till 59
ss Andra från 00 till 59
t Första tecknet i AM eller PM (t.ex. 9A, 5P)
tt AM eller PM
z Timmars förskjutning, utan inledande nolla (t.ex. +3)
zz Timmars förskjutning, med inledande noll (t.ex. +03)

Du kan läsa mer i Microsofts dokumentation för standardformat för datum och tid och anpassade format.

Om du vill formatera detta datum för ett specifikt språk och/eller land, använd det tredje valfria argumentet:kultur . Detta argument är en sträng som innehåller kulturkoden för en viss region eller land. (Kulturkoder består av en språkkod, ett bindestreck och en landskod.) I exemplet nedan använder vi kulturkoden för Tyskland, som kombinerar den tyska språkkoden ('de') med landskoden för Tyskland ('DE'), d.v.s. 'de-DE'. Det resulterande datumet visas på tyska och formaterat som en tysk publik förväntar sig att se det.

SELECT  FirstName,
        LastName,
        FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy', 'de-DE')
          AS FormattedRegistrationDate
FROM Patient;

Här är resultatet av den här frågan:

Förnamn Efternamn Registreringsdatum
Jane Williams Donnerstag, 20 juni 2019
Gabriel Brun Samstag, 2 februari 2019
Lora Folk Samstag, 5 november 2016

  1. Javascript-datum till sql-datumobjekt

  2. Automatisk dataversionering i MariaDB Server 10.3

  3. Hur kan jag generera (eller få) ett ddl-skript på en befintlig tabell i Oracle? Jag måste återskapa dem i Hive

  4. SqlBulkCopy från en lista<>