Hvordan formatere dato og klokkeslett i SQL -serveren

Hvordan formatere dato og klokkeslett i SQL -serveren
Å manipulere dato- og klokkeslettverdier ved å bruke datatetyper for datetime, dato og tid og tid er en av SQLs viktigste funksjonaliteter, siden disse datatypene er spesielt designet for å lagre slike verdier. De brukes ofte i applikasjoner som krever beregning og manipulering av dato- og klokkeslettdata. I denne artikkelen vil vi grave dypere i disse datatypene.

Grunnleggende datatyper i SQL

  • DATO: Denne datatypen brukes til å lagre datoverdiene i YYYY-MM-DD-formatet. Det er i stand til å representere datoene innenfor området 1. januar 0001 til 31. desember 9999. Datoverdiene lagres i et kompakt format med bare tre byte.
  • TID: Tidsdatatypen brukes til å lagre tidsverdiene i HH: MI: SS -format. Det er i stand til å representere tidsverdiene innenfor området 00:00 til 23:59:59.
  • DATO TID: Datetime-datatypen er i stand til å lagre både dato- og tidsverdier i YYYY-MM-DD HH: MI: SS-format. Det tillater verdiene innenfor området 1. januar 1753, 00:00:00 til 31. desember 9999, 23:59:59. Denne datatypen er nyttig for lagring av tidsstempler som transaksjonstider eller hendelsestider.
  • SmallDateTime: Denne datatypen er den samme som datatetypen, men med en viss forskjell. Den lagrer både dato- og tidsverdier, men med et mindre verdier fra 1. januar 1900, 00:00:00 til 6. juni 2079, 23:59:59. Verdiene er også avrundet til nærmeste minutt som sparer plass og reduserer behandlingstiden. Denne datatypen er nyttig for lagring av en tidsfølsom informasjon som ikke krever høy presisjon. Det tar bare 4 byte med data. Det er lagret i YYYY-MM-DD HH: MM: SS-format.
  • DateTime2: Denne datatypen ligner på datatypen Datetime, men med høyere presisjon og et større område. Verdierområdet er det samme som datetiden, men det kan lagre brøk sekundene opp til 7 sifre.

Hvordan lagres datoer i SQL -serveren?

Innenfor SQL-serveren lagres datoer med to 4-byte heltall. Det første heltallet tilsvarer antall dager før eller etterfølger grunndatoen 1. januar 1900. Det andre heltallet tilsvarer antall 1/300. sekund som gikk siden midnatt. For eksempel lagres datoen "1. januar 2000 12:00:00" som de to heltallene - 36.529 (antall dager mellom 1. januar 1900 og 1. januar 2000) og 43.200.000 (antall 1/300. av et sekund siden midnatt).

SQL-serveren gir også en rekke innebygde funksjoner for å jobbe med datoer, for eksempel DateAdd, Datediff og konvertere, som lar oss utføre de vanlige operasjonene som å legge til eller trekke fra tidsintervallene, sammenligne datoene og formatere den datoer.

For å utføre SQL -spørsmålene i en database, bruker vi vanligvis et verktøy som SQL Server Management Studio (SSMS).

Opprette en [dbo].[Bestillinger] Tabell

For å lage en tabell i databasen vår, må vi skrive følgende spørsmål:

Lag tabell [dbo].[BESTILLINGER] (
[ord_number] int ikke null
,[ord_datetime] DateTime NULL
,[ord_date] dato null
,[Deli_datetime] DateTime NULL
,[last_visit_date] dato null
)

Sett inn dataene i [DBO].[Bestillinger] Tabell

Sett inn verdiene i tabellen ved å bruke følgende kommando:

Sett inn [dbo].[Bestillinger] ([ord_number], [ord_datetime], [ord_date], [deli_datetime], [last_visit_date])
Verdier
('1', '2021-10-01 10:30:00', '2021-10-01', '2021-10-12 10:11:10', '2021-11-01'),
('2', '2021-10-01 12:45:00', '2021-10-01', '2021-10-10 14:10:11', '2021-10-15'),
('3', '2021-10-30 13:25:00', '2021-10-30', '2021-11-05 13:22:12', '2021-12-30'),
('4', '2021-09-22 16:30:00', '2021-09-22', '2021-09-25 14:12:13', '2021-12-22'),
('5', '2021-01-10 18:15:00', '2021-01-10', '2021-02-01 11:15:14', '2022-01-10'),
('6', Current_Timestamp, Convert (Dato, Current_Timestamp), DateAdd (Day, 5, Current_Timestamp), DateAdd (måned, 5, Current_Timestamp))

Konvertere en dato til streng

Hvis vi bringer tilbake datetimeverdiene fra tabellen, vil resultatene vise som “2021-10-01 10:30:00.000 ”. Men hvis vi liker å konvertere den til en streng i vårt eget format i SQL -koden, kan vi gjøre det ved å bruke følgende funksjon:

PLUKKE UT
[ord_datetime]
,Konverter (varchar (20), [ord_datetime], 22) 'order_date_string'
FRA
[dbo].[BESTILLINGER]

Produksjon:

ord_datetime order_date_string
2021-10-01 10:30:00.000 10/01/21 10:30:00
2021-10-01 12:45:00.000 10/01/21 12:45:00
2021-10-30 13:25:00.000 10/30/21 13:25:00

Finne en spesifikk dato ved hjelp av hvor leddet

For å finne ordrene der bestillingsdatoen er 1. desember 2021, må vi følge følgende spørsmål:

PLUKKE UT
[ord_number]
,[ord_date]
FRA
[dbo].[BESTILLINGER]
HVOR
[ord_date] = '01/10/2021 '

Produksjon:

ord_number ord_date
5 2021-01-10
5 2021-01-10

Skille datoen fra tiden

Vi kan også bruke konverteringsfunksjonen på en dato for å hente bare datoverdien ved å spesifisere en stil. For dette bruker vi følgende spørsmål:

Erklære @DD som DateTime
Sett @DD = '2011-07-03 20:30:40'
Velg Convert (Varchar, @DD, 103)

Produksjon:

(Ingen kolonneavn)
1 03/07/2011

Få gjeldende dato og tid

Her er et eksempel på en SQL -spørring som henter gjeldende dato og tid ved å bruke GetDate og Current_Timestamp -funksjonene:

PLUKKE UT
GetDate ()
,Current_timestamp

Produksjon:

(Ingen kolonneavn) (ingen kolonneavn)
1 2023-03-04 23:44:02.883 2023-03-04 23:44:02.883

Finne forskjellen mellom to datoer

Det er ofte nyttig å finne forskjellen mellom to datoer. Med dette kan vi gjøre ting som å finne antall dager mellom bestillingen og en leveringsdato.

Her er et eksempel:

PLUKKE UT
[ord_date]
,[Deli_datetime]
,Datediff (dag, [ord_date], [deli_datetime]) 'del_days'
FRA
[dbo].[BESTILLINGER]

Produksjon:

ord_date deli_datetime del_days
1 2021-10-01 2021-10-12 10:11:10.000 11
2 2021-10-01 2021-10-10 14:10:11.000 9
3 2021-10-30 2021-11-05 13:22:12.000 6

Konklusjon

Vi lærte å manipulere datoer, tider og strenger ved å bruke de innebygde funksjonene. Disse funksjonene er veldig nyttige for å utføre beregninger og transformasjoner på dataene som er lagret i SQL Server -tabellene. Ved å forstå og bruke disse datatypene og funksjonene effektivt, kan vi skrive mer effektive og kraftige SQL -spørsmål.