sql >> Database teknologi >  >> RDS >> Database

Sådan formateres en dato i T-SQL

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:

  1. Den nye datatype (i vores eksempel, NVARCHAR).
  2. Et udtryk eller kolonnenavn, der indeholder datoen, der skal formateres (i vores eksempel, start_date kolonne).
  3. 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.


  1. Monitoring Galera Cluster for MySQL eller MariaDB - Understanding Metrics (Opdateret)

  2. 5 måder at kontrollere, om der findes en tabel i MySQL

  3. Fix:"Sætningen BACKUP LOG er ikke tilladt, mens gendannelsesmodellen er SIMPLE" i SQL Server (og SQL Edge)

  4. Hvordan kan jeg lave en FØR OPDATERET trigger med sql server?