SQL Server datediff

SQL Server datediff
Datoer er viktige når du jobber med databaser. De lar deg ta med en spesifikk tidsstempel for data.

Ved hjelp av denne guiden lærer du hvordan du beregner forskjellen mellom to datoer ved å bruke SQL Server Datediff () -funksjonen.

Grunnleggende bruk

Datediff -funksjonen lar deg passere start- og sluttdatoverdier. Den beregner og returnerer forskjellen mellom dem i år, måneder, uker, dager osv.

Funksjonssyntaksen er som:

datediff (enhet, start_date, end_date);

Funksjonsargumenter

Funksjonen tre hovedargumenter uttrykt som:

1. Enhet - representerer enhetene som funksjonen vil rapportere forskjellen mellom den spesifiserte start- og sluttdatoen. SQL Server støtter ikke å passere verdien av enhetsparameteren som en variabel av en streng som 'år';

Tabellen nedenfor viser enheten og forkortelsen du kan bruke i enhetsparameteren.

enhetsforkortelse
-------------------------------------------------- ------------
Nanosekund NS
Microscond MCS
Millisekund MS
Andre S, SS
Minutt mi, n
Time hh
Uke WK, WW
Dag DD, D
Dag på året, dy, y
Måned mm, m
kvart QQ, q
År yy, åååå

2. start_date & end_date - definerer de to datoene hvis forskjell må beregnes. Verdien av begge argumenter kan være en bokstavelig streng eller et uttrykk som kan løse en verdi av typen: dato, datetime, datetim2, dateTimeOffset, tid, smalldateTime.
For å unngå tvetydighet, bør du vurdere å bruke fire sifre for å representere et år.

Funksjonsretur

Datediff -funksjonen returnerer en INT -type, som representerer start- og sluttdatoforskjellen. Noen ganger kan forskjellen være utenfor rekkevidde for størrelsen på et heltall. Hvis det skjer, vil den daterte funksjonen returnere en feil. Vurder å bruke datediff_big -funksjonen for et slikt scenario.

SQL Server datediff () eksempler

Følgende eksempler er nyttige for å illustrere hvordan du skal jobbe med den daterte () -funksjonen.

Eksempel 1:

Tenk på eksemplet som er vist nedenfor:

Velg Datediff (måned, '1998-09-06', '2022-06-06') som forskjell;

Spørringen ovenfor skal returnere den totale månedens forskjell mellom start- og sluttdato som:

forskjell
-----------
285
(1 rad berørt)

Eksempel 2:

Anta at du vil beregne hvor mange sekunder som er det på en dag? Du kan bruke datediff -funksjonen som vist:

Velg Datediff (andre, '2022-01-01', '2022-01-02') som forskjell;

Eksemplet over skal returnere antall sekunder på en dag som:

-----------
86400
(1 rad berørt)

Eksempel 3:

Du kan støte på et scenario der forskjellen mellom to datoer er stor enn det maksimale for en heltallstype. For eksempel forskjellen i nanosekunder på en dag.

Tenk på eksemplet på spørringen nedenfor:

Velg Datediff (Nanosekund, '2022-01-01', '2022-01-02') som forskjell;

Hvis vi kjører spørringen ovenfor, returnerer SQL Server en overløpsfeil som:

Datediff -funksjonen resulterte i et overløp. Antall dataparter som skiller to dato/klokkeslett forekomster er for stort. Prøv å bruke datediff med en mindre presis datapart.

For å løse dette, bruk funksjonen datediff_big som:

Velg Datediff_Big (Nanosecond, '2022-01-01', '2022-01-02') som forskjell;

I dette eksemplet returnerer spørringen antall nanosekunder på en dag som:

forskjell
--------------------
86400000000000

Eksempel 4:

Eksemplet nedenfor viser deg hvordan du beregner forskjellen i timer mellom 1998 og 2021.

Velg Datediff (time, '1998-01-01', '2021-01-01');

Den resulterende verdien er som:

-----------
201624

Eksempel 5:

Siden returverdien til den daterte funksjonen er et heltall, kan vi kaste den til en streng, slik at du kan utføre strengkonturasjon.

For eksempel:

Velg rollebesetning (datediff (time, '1998-01-01', '2021-01-01') som varchar (20)) + 'timer';

Eksemplet over kaster verdien fra en heltallsstreng og legger til en streng sammenkobling.

Eksempelets resultat er som:

--------------------------
201624 timer

Avsluttende ord

Vi håper du likte og lærte hvordan du beregner forskjellene mellom to datoer ved bruk av forskjellige enheter i SQL Server. Eksemplene gitt i denne guiden kan hjelpe deg med å manipulere dato- og tidsdata mer effektivt.

Takk for at du leste!