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

6 funktioner til at få dagen, måneden og året fra en dato i SQL Server

Transact-SQL indeholder en masse funktioner, der hjælper os med at arbejde med datoer og tidspunkter. En af de mere almindelige opgaver, når man arbejder med datoer, er at udtrække de forskellige dele af datoen. For eksempel vil vi nogle gange kun have året eller måneden. Andre gange vil vi måske have ugedag. Uanset hvad, er der masser af måder at gøre dette på i SQL Server.

Især giver følgende funktioner dig mulighed for at returnere dag, måned og år fra en dato i SQL Server.

  • DAY() , MONTH() , og YEAR()
  • DATEPART()
  • DATENAME()
  • FORMAT()

Disse funktioner er forklaret nedenfor.

DAY(), MONTH() og YEAR() funktionerne

Den mest oplagte måde at returnere dagen, måneden og året fra en dato er at bruge T-SQL-funktionerne af samme navn. Ja, T-SQL har funktioner bygget specifikt med det formål at returnere disse tre datodele.

Her er et eksempel på, hvordan de fungerer:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DAY(@date) AS DAY,
    MONTH(@date) AS MONTH,
    YEAR(@date) AS YEAR;

Resultat:

+-------+---------+--------+
| DAY   | MONTH   | YEAR   |
|-------+---------+--------|
| 2     | 6       | 2018   |
+-------+---------+--------+

Disse funktioner returnerer datodelen som et heltal. De returnerer det samme resultat som DATEPART() funktion returnerer for den angivne datodel.

DATUMPART()-funktionen

DATEPART() funktion blev bygget specifikt til at returnere specificerede dele af en dato. Derfor kan vi bruge denne funktion til at returnere nøjagtigt det samme resultat som det foregående eksempel:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATEPART(day, @date) AS DAY,
    DATEPART(weekday, @date) AS WEEKDAY,
    DATEPART(month, @date) AS MONTH,
    DATEPART(year, @date) AS YEAR;

Resultat:

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | 7         | 6       | 2018   |
+-------+-----------+---------+--------+

En fordel ved at bruge denne funktion er, at du også kan returnere andre dele af datoen og klokkeslættet. Som du kan se med dette eksempel, returnerede jeg ugedagen såvel som dagen (day er dagen i måneden, weekday er ugedagen). Du kan også returnere de forskellige tidsdele, såsom minutter, sekunder, millisekunder osv. For flere eksempler, se DATEPART() Eksempler i SQL Server.

DATEPART() funktion returnerer sit resultat som et heltal, og du vil derfor ikke være i stand til at få månedsnavnet eller ugedagsnavnet fra datoen. Men for at bekymre dig, kan du bruge DATENAME() eller FORMAT() funktioner til det.

DATENAME()-funktionen

DATENAME() funktionen ligner DATEPART() funktion, bortset fra at den returnerer resultatet som en tegnstreng i stedet for et heltal. DATENAME() returnerer også måned og ugedag som deres fulde navn i stedet for deres numeriske værdi.

Eksempel:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATENAME(day, @date) AS DAY,
    DATENAME(weekday, @date) AS WEEKDAY,
    DATENAME(month, @date) AS MONTH,
    DATENAME(year, @date) AS YEAR;

Resultat:

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | Saturday  | June    | 2018   |
+-------+-----------+---------+--------+

For flere eksempler på denne funktion, se DATENAME() Eksempler i SQL Server.

FORMAT()-funktionen

Vi kan bruge FORMAT() funktion til at returnere de samme værdier som med DATENAME() funktion og mere.

Dette er en mere alsidig funktion end de tidligere. Det giver dig mulighed for at formatere dato/klokkeslæt samt numeriske værdier som strenge. Returværdien er enten nvarchar eller null (afhængigt af input), og længden af ​​strengen bestemmes af det angivne format.

FORMAT() giver også flere muligheder for, hvordan datodelen præsenteres. Du kan angive, om det skal vises som et enkelt tegn, to tegn, tre, fire og endda fem i nogle tilfælde.

Her er eksempler til demonstration.

Dag

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS d,
    FORMAT(@date, 'dd') AS dd,
    FORMAT(@date, 'ddd') AS ddd,
    FORMAT(@date, 'dddd') AS dddd;

Resultat:

+-----+------+-------+----------+
| d   | dd   | ddd   | dddd     |
|-----+------+-------+----------|
| 2   | 02   | Sat   | Saturday |
+-----+------+-------+----------+

Måned

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'M ') AS M,
    FORMAT(@date, 'MM') AS MM,
    FORMAT(@date, 'MMM') AS MMM,
    FORMAT(@date, 'MMMMM') AS MMMM;

Resultat:

+-----+------+-------+--------+
| M   | MM   | MMM   | MMMM   |
|-----+------+-------+--------|
| 6   | 06   | Jun   | June   |
+-----+------+-------+--------+

År

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;

Resultat:

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 18  | 18   | 2018  | 2018   | 02018   |
+-----+------+-------+--------+---------+

Bemærk, at vi har mulighed for at formatere årsdelen som fem cifre.

Om antallet af cifre

Når du returnerer en datodel i cifferform, bestemmer formatspecifikationen minimumsantallet af cifre, der skal returneres. For eksempel, når du bruger  yyy , returneres året som tre cifre, hvis året er 0008 men som fire cifre, hvis året er 2008 .

Eksempel:

DECLARE @date datetime2 = '0008-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;  

Resultat:

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 8   | 08   | 008   | 0008   | 00008   |
+-----+------+-------+--------+---------+

Også når du bruger den enkelte mulighed (f.eks. d ) som datospecifikation, skal du tilføje et mellemrum, hvis du kun ønsker, at datodelen returneres af sig selv. Hvis du ikke gør dette, får du mere end den enkelte datepart.

Eksempel:

DECLARE @date datetime2 = '2008-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS 'Space',
    FORMAT(@date, 'd') AS 'No Space',
    FORMAT(@date, 'M ') AS 'Space',
    FORMAT(@date, 'M') AS 'No Space',
    FORMAT(@date, 'y ') AS 'Space',
    FORMAT(@date, 'y') AS 'No Space';

Resultat:

+---------+------------+---------+------------+---------+------------+
| Space   | No Space   | Space   | No Space   | Space   | No Space   |
|---------+------------+---------+------------+---------+------------|
| 2       | 6/2/2008   | 6       | June 2     | 8       | June 2008  |
+---------+------------+---------+------------+---------+------------+

For mere FORMAT() eksempler, se Sådan formateres dato og klokkeslæt i SQL Server.


  1. Postgres - hvordan returneres rækker med 0 antal for manglende data?

  2. Kode til at validere SQL-scripts

  3. MySQL-kommandoer:Snydeark med almindelige MySQL-forespørgsler

  4. Nye Microsoft Access-funktioner på vej!