sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man hämtar dagen, månaden och året från ett datum i SQL

De flesta av de stora RDBMS:erna har funktioner som gör att vi kan extrahera dag, månad och år från datetime-värden.

Vissa RDBMS tillhandahåller flera sätt att göra detta, och andra är mer begränsade. Nedan finns exempel på att extrahera dag, månad och år från datumvärden i några av de mest populära RDBMS:erna.

MySQL

MySQL har flera funktioner som kan användas för att extrahera dag, månad och år från ett datum. En av dessa är EXTRACT() funktion:

SELECT 
    EXTRACT(DAY FROM '2035-12-19') AS Day,
    EXTRACT(MONTH FROM '2035-12-19') AS Month,
    EXTRACT(YEAR FROM '2035-12-19') AS Year;

Resultat:

+------+-------+------+
| Day  | Month | Year |
+------+-------+------+
|   19 |    12 | 2035 |
+------+-------+------+

I det här fallet extraherade jag varje datumdel till sitt eget fält.

Om du vill att alla datumdelar ska returneras i samma fält, DATE_FORMAT() funktion kan göra detta åt dig.

MySQL har också ett gäng funktioner som returnerar specifika datumdelar från ett datum, till exempel DAY() , MONTH() , YEAR() , etc.

Se Returnera dagen, månaden och året i MySQL för fler exempel.

Oracle

Oracle har en TO_CHAR() funktion som kan användas för att extrahera datumdelar i sina egna fält, eller alla i ett enda fält. Här är ett exempel på hur du returnerar dem i enskilda fält:

SELECT 
    TO_CHAR(DATE '2035-09-26', 'Day') AS Day,
    TO_CHAR(DATE '2035-09-26', 'DD') AS DD,
    TO_CHAR(DATE '2035-09-26', 'Month') AS Month,
    TO_CHAR(DATE '2035-09-26', 'YYYY') AS Year
FROM DUAL;

Resultat:

         DAY    DD        MONTH    YEAR 
____________ _____ ____________ _______ 
Wednesday    26    September    2035    

Se den här fullständiga listan över Datetime Format Elements i Oracle för en lista över formatelement som kan användas för att formatera datetime-värden med den här funktionen.

Oracle har också en EXTRACT() funktion som fungerar som MySQL:s funktion med samma namn.

SQL-server

SQL Server har ett ganska stort utbud av funktioner som kan returnera datumdelar som dag, månad och år.

DATEPART() funktion är utformad specifikt för att returnera specificerade delar av ett datum:

DECLARE @date date = '2045-07-03'; 
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   |
|-------+-----------+---------+--------|
| 3     | 2         | 7       | 2045   |
+-------+-----------+---------+--------+

En liknande funktion är DATENAME() , som kan returnera dag- och månadsnamn som en sträng.

SQL Server har också funktioner som DAY() , MONTH() , YEAR() , etc som returnerar en specifik datumdel.

Och låt oss inte glömma FORMAT() funktion, vilket är perfekt om du vill returnera alla datumdelar i samma fält.

Se 6 funktioner för att hämta dag, månad och år från ett datum i SQL Server för fler exempel.

PostgreSQL

PostgreSQL har några funktioner som kan returnera datumdelar från datum.

Här är ett exempel på DATE_PART() funktion:

SELECT 
    DATE_PART('DAY', date '2035-10-30') AS "Day",
    DATE_PART('DOW', date '2035-10-30') AS "DOW",
    DATE_PART('DOY', date '2035-10-30') AS "DOY",
    DATE_PART('MONTH', date '2035-10-30') AS "Month",
    DATE_PART('YEAR', date '2035-10-30') AS "Year";

Resultat:

 Day | DOW | DOY | Month | Year 
-----+-----+-----+-------+------
  30 |   2 | 303 |    10 | 2035

PostgreSQL har också en EXTRACT() funktion som i princip gör samma sak, förutom med en lite annorlunda syntax.

Och TO_CHAR() funktionen kan användas om du vill returnera flera datumdelar i samma fält.

SQLite

SQLite är mer begränsad när det gäller datum- och tidsfunktioner. Du kan dock fortfarande använda STRFTIME() funktion för att extrahera dagen, månaden och året från ett datum:

SELECT STRFTIME('%d %m %Y', '2035-12-01');

Resultat:

01 12 2035

I det här exemplet har jag returnerat alla datumdelar i samma fält. Men detta är inte nödvändigtvis nödvändigt. Om du vill att de ska returneras i olika fält kan du anropa STRFTIME() flera gånger, var och en med olika formatelement:

SELECT 
    strftime('%d', '2035-12-01') AS "Day",
    strftime('%m', '2035-12-01') AS "Month",
    strftime('%Y', '2035-12-01') AS "Year";

Resultat:

Day  Month  Year
---  -----  ----
01   12     2035

MariaDB

MariaDB tillhandahåller ett stort urval av funktioner som kan returnera dagen, månaden och året från ett datum och tid.

Här är ett exempel på DATE_FORMAT() funktion:

SELECT DATE_FORMAT('2023-07-25', '%W, %D %M %Y');

Resultat:

+-------------------------------------------+
| DATE_FORMAT('2023-07-25', '%W, %D %M %Y') |
+-------------------------------------------+
| Tuesday, 25th July 2023                   |
+-------------------------------------------+

Den funktionen låter oss returnera alla datumdelar i ett enda fält (även om detta inte krävs – du kan lika gärna returnera varje datumdel i ett annat fält genom att anropa DATE_FORMAT() flera gånger, varje gång med en annan formatsträng).

Och precis som några av de andra har MariaDB också en EXTRACT() funktion som extraherar en given datumdel.

Och det finns också ett stort utbud av specifika funktioner för varje datumdel, som DAY() , MONTH() , YEAR() osv

Se 11 funktioner för att få dagen, månaden och året från ett datum i MariaDB för en fullständig översikt.


  1. Automatisera databashälsokontroll

  2. sql-fråga till mongodb?

  3. delayed_jobs vs resque vs beanstalkd?

  4. WiredTiger och uppdateringar på plats