sql >> Database >  >> RDS >> Sqlserver

6 functies om de dag, maand en jaar van een datum in SQL Server te krijgen

Transact-SQL bevat een aantal functies die ons helpen met datums en tijden te werken. Een van de meest voorkomende taken bij het werken met datums is het extraheren van de verschillende delen van de datum. Soms willen we bijvoorbeeld alleen het jaar of de maand. Andere keren willen we misschien de dag van de week. Hoe dan ook, er zijn genoeg manieren om dit te doen in SQL Server.

Met name de volgende functies stellen u in staat om de dag, de maand en het jaar van een datum in SQL Server te retourneren.

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

Deze functies worden hieronder uitgelegd.

De functies DAY(), MONTH() en YEAR()

De meest voor de hand liggende manier om de dag, de maand en het jaar van een datum terug te geven, is door de T-SQL-functies met dezelfde naam te gebruiken. Ja, T-SQL heeft functies die speciaal zijn gebouwd om deze drie dateparts te retourneren.

Hier is een voorbeeld van hoe ze werken:

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

Resultaat:

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

Deze functies retourneren het datepart als een geheel getal. Ze geven hetzelfde resultaat als de DATEPART() functie retourneert voor het opgegeven datumdeel.

De DATEPART()-functie

De DATEPART() functie is speciaal gebouwd voor het retourneren van gespecificeerde delen van een datum. Daarom kunnen we deze functie gebruiken om exact hetzelfde resultaat te retourneren als in het vorige voorbeeld:

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;

Resultaat:

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

Een voordeel van het gebruik van deze functie is dat u ook andere delen van de datum en tijd kunt retourneren. Zoals je in dit voorbeeld kunt zien, heb ik zowel de weekdag als de dag geretourneerd (day is de dag van de maand, weekday is de dag van de week). U kunt ook de verschillende tijdsdelen retourneren, zoals minuten, seconden, milliseconden, enz. Voor meer voorbeelden, zie DATEPART() Voorbeelden in SQL Server.

De DATEPART() functie retourneert het resultaat als een geheel getal en daarom kunt u de naam van de maand of de weekdag niet uit de datum halen. Maar maak je geen zorgen, je kunt de DATENAME() . gebruiken of FORMAT() functies daarvoor.

De DATENAME() Functie

De DATENAME() functie is vergelijkbaar met de DATEPART() functie, behalve dat het het resultaat retourneert als een tekenreeks in plaats van een geheel getal. DATENAME() geeft ook maand en weekdag terug als hun volledige naam, in plaats van hun numerieke waarde.

Voorbeeld:

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;

Resultaat:

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

Voor meer voorbeelden van deze functie, zie DATENAME() Voorbeelden in SQL Server.

De FORMAT()-functie

We kunnen de FORMAT() . gebruiken functie om dezelfde waarden terug te geven als bij de DATENAME() functie en meer.

Dit is een meer veelzijdige functie dan de vorige. Hiermee kunt u datum/tijd opmaken, evenals numerieke waarden als tekenreeksen. De retourwaarde is ofwel nvarchar of null (afhankelijk van de invoer), en de lengte van de string wordt bepaald door het gespecificeerde formaat.

FORMAT() biedt ook meer opties voor hoe het datepart wordt gepresenteerd. U kunt aangeven of u het wilt weergeven als een enkel teken, twee tekens, drie, vier en in sommige gevallen zelfs vijf.

Hier zijn voorbeelden om te demonstreren.

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;

Resultaat:

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

Maand

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;

Resultaat:

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

Jaar

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;

Resultaat:

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

Merk op dat we de mogelijkheid hebben om het jaargedeelte op te maken als vijf cijfers.

Over het aantal cijfers

Bij het retourneren van een datumdeel in cijfervorm, bepaalt de formaatspecificatie het minimum aantal cijfers dat moet worden geretourneerd. Bijvoorbeeld bij gebruik van  yyy , wordt het jaartal als drie cijfers geretourneerd als het jaar 0008 is maar als vier cijfers als het jaar 2008 is .

Voorbeeld:

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;  

Resultaat:

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

Ook bij gebruik van de enkele optie (bijv. d ) als datumspecificatie, moet je een spatie toevoegen als je alleen dat datepart zelf wilt retourneren. Als je dit niet doet, krijg je meer dan dat ene datepart.

Voorbeeld:

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';

Resultaat:

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

Voor meer FORMAT() voorbeelden, zie Datum en tijd opmaken in SQL Server.


  1. Converteer tekst naar getal in MySQL-query

  2. Voorbeelden van het converteren van 'date' naar 'datetime' in SQL Server (T-SQL)

  3. JPA flush vs commit

  4. Hoe bepaal je programmatisch welke SQL-tabellen een identiteitskolom hebben?