sql >> Databasteknik >  >> RDS >> Sqlserver

ODBC-skalära funktioner för datum och tid i SQL Server (T-SQL-exempel)

Du kan använda ODBC-skalära funktioner när du kör T-SQL-satser i SQL Server. Det finns olika typer av ODBC-skalära funktioner, inklusive strängfunktioner, numeriska funktioner, systemfunktioner och naturligtvis datum-/tidsfunktioner (även kallade datum-, tid- och intervallfunktioner).

Nedan finns exempel på datum, tid och intervallfunktioner som du kan använda i SQL Server.

Syntax

Först, här är syntaxen du behöver använda när du anropar en ODBC-skalär funktion:

VÄLJ {fn  [ (,....n) ] }

Där är namnet på funktionen och (,....n) är valfritt antal valfria argument.

Så det viktigaste att komma ihåg är att när du anropar en ODBC-skalär funktion måste du omsluta funktionsanropet inom klammerparenteser ({} ) och prefix namnet med fn .

Exempel 1 – NOW()

Denna funktion returnerar aktuellt datum och tid som ett tidsstämpelvärde.

VÄLJ {fn NOW()} SOM Resultat;

Resultat:

+------------------------+| Resultat ||------------------------|| 2018-06-13 21:52:25.667 |+--------------------------------+

Exempel 2 – Tidsstämpel, datum och tid

CURRENT_TIMESTAMP() funktion returnerar det aktuella lokala datumet och lokal tid som ett tidsstämpelvärde. Du kan också använda CURRENT_DATE() för att endast returnera datumdelen och/eller CURRENT_TIME() för att endast returnera tidsdelen.

VÄLJ {fn CURRENT_TIMESTAMP()} SOM 'Datum och tid', {fn CURRENT_DATE()} SOM 'Datum', {fn CURRENT_TIME()} SOM 'Tid';

Resultat:

+------------------------+------------+------- -------+| Datum och tid | Datum | Tid ||------------------------+------------+-------- ------|| 2018-06-13 21:57:29.197 | 2018-06-13 | 21:57:29.197 |+------------------------+------------+---- ----------+

Även CURRENT_TIMESTAMP() och CURRENT_TIME() båda accepterar ett valfritt argument för att bestämma sekunders precision för det returnerade värdet.

Exempel:

VÄLJ {fn CURRENT_TIMESTAMP(3)} SOM 'Datum och tid', {fn CURRENT_TIME(6)} SOM 'Tid';

Resultat:

+------------------------+-----------------+| Datum och tid | Tid ||------------------------+----------------|| 2018-06-13 22:00:59.263 | 22:00:59.263000 |+------------------------+---------------- +

I det här exemplet, CURRENT_TIMESTAMP() returnerar en sekunders precision på 3, medan CURRENT_TIME() returnerar en sekunders precision på 6.

Exempel 3 – CURDATE() och CURTIME()

Du kan använda CURDATE() och/eller CURTIME() som ett alternativ till ovanstående datum- och tidsfunktioner:

VÄLJ {fn CURDATE()} SOM 'Datum', {fn CURTIME()} SOM 'Tid';

Resultat:

+------------+--------------+| Datum | Tid ||------------+-------------|| 2018-06-13 | 22:05:20.013 |+------------+-------------+

Observera att dessa argument inte accepterar några argument, så om du behöver ange sekunders precision, använd CURRENT_DATE() och/eller CURRENT_TIME() istället.

Exempel 4 – dagar och veckor

Det finns ett gäng ODBC-skalära funktioner för att returnera specifika delar av ett datumvärde. Dessa funktioner accepterar ett argument, vilket är datumuttrycket att extrahera den önskade datumdelen från.

Här är de olika funktionerna för att returnera dagar och veckor från datumet:

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÄLJ {fn DAYNAME(@date)} SOM 'DAYNAME', {fn DAYOFYEAR(@date)} SOM 'DAYOFYEAR', {fn DAYOFMONTH(@date)} SOM 'DAYOFMONTH', {fn DAYOFWEEK(@date)} SOM 'DAYOFWEEK', {fn WEEK(@date)} SOM 'WEEK';

Resultat:

+-------+-------------------+----- --------+--------+| DAGNAMN | DAGÅR | DAG I MÅNADEN | VECKADAG | VECKA ||-----------+-------------+-------------------+------ -------+--------|| måndag | 45 | 14 | 2 | 8 |+-----------+-------------+------------------ -------+--------+

I det här fallet tilldelade vi en variabel ett datum och skickade sedan den variabeln till varje funktion. Funktionen returnerade sedan den tillämpliga datumdelen.

Exempel 5 – månader, kvartal och år

Här är de olika funktionerna för att returnera månader, kvartal och år från datum-/tidsvärdet:

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÄLJ {fn YEAR(@date)} SOM 'YEAR', {fn MONTH(@date)} SOM 'MONTH', {fn MONTHNAME(@date)} SOM 'MONTHNAME', {fn QUARTER(@date)} SOM 'QUARTER';

Resultat:

+--------+---------+-------------+-----------+| ÅR | MÅNAD | MÅNADSNAMN | KVARTAL ||--------+---------+-------------+-----------|| 2000 | 2 | februari | 1 |+--------+---------+-------------+-----------+ 

Exempel 6 – timmar, minuter och sekunder

Här är de olika funktionerna för att returnera timmar, minuter och sekunder från datum-/tidsvärdet:

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÄLJ {fn HOUR(@date)} SOM 'HOUR', {fn MINUTE(@date)} SOM 'MINUTE', {fn SECOND(@date)} SOM 'SECOND';

Resultat:

+--------+----------+----------+| TIMMA | MINUTT | ANDRA ||--------+----------+--------|| 7 | 31 | 58 |+--------+----------+----------+

Exempel 7 – EXTRACT()-funktionen

Det finns också en ODBC-skalär funktion som heter EXTRACT() , som låter dig extrahera de olika datumdelarna från datum/tidsvärdet. Exempel nedan.

År, månad och dag

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÄLJ {fn EXTRACT(YEAR FROM @date)} SOM 'YEAR', {fn EXTRACT(MONTH FROM @date)} SOM 'MONTH ', {fn EXTRACT(DAY FROM @date)} SOM 'DAY';

Resultat:

+--------+---------+------+| ÅR | MÅNAD | DAG ||--------+---------+-------|| 2000 | 2 | 14 |+--------+---------+-------+

Timmar, minuter och sekunder

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÄLJ {fn EXTRACT(HOUR FROM @date)} SOM 'HOUR', {fn EXTRACT(MINUTE FROM @date)} SOM 'MINUTE ', {fn EXTRACT(SECOND FROM @date)} SOM 'SECOND';

Resultat:

+--------+----------+----------+| TIMMA | MINUTT | ANDRA ||--------+----------+--------|| 7 | 31 | 58 |+--------+----------+----------+

Exempel 8 – Funktionen TIMESTAMPADD()

Den TIMESTAMPADD() låter dig lägga till ett specificerat antal av det angivna intervallet (datum/tidsdel) till datum/tidsvärdet. Denna funktion accepterar tre argument; intervallet (datum/tidsdel) som ska läggas till (t.ex. månad), numret på den delen som ska läggas till och datumvärdet. Exempel nedan.

År, Kvartal, Månad och Dag

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÄLJ {fn TIMESTAMPADD(SQL_TSI_YEAR, 21, @date)} SOM 'SQL_TSI_YEAR', {fn TIMESTAMPTSI_1,SQUAR } SOM 'SQL_TSI_QUARTER', {fn TIMESTAMPADD(SQL_TSI_MONTH, 21, @date)} AS 'SQL_TSI_MONTH', {fn TIMESTAMPADD(SQL_TSI_DAY, 21, @date)} SOM 'SQL_TSI_DAY';

Resultat:

SQL_TSI_YEAR | 2021-02-14 07:31:58.1234567SQL_TSI_QUARTER | 2005-05-14 07:31:58.1234567SQL_TSI_MONTH | 2001-11-14 07:31:58.1234567SQL_TSI_DAY | 2000-03-06 07:31:58.1234567

Timmar, minuter och sekunder

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÄLJ {fn TIMESTAMPADD(SQL_TSI_HOUR, 5, @date)} SOM 'SQL_TSI_HOUR', {fn TIMESTAMPTSI_MINUTLED, @SQL_TSI_HOUR, } SOM 'SQL_TSI_MINUTE', {fn TIMESTAMPADD(SQL_TSI_SECOND, 5, @date)} AS 'SQL_TSI_SECOND', {fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, 5, @date)} AS 'SQACL_TSIOND_';

Resultat:

SQL_TSI_HOUR | 2000-02-14 12:31:58.1234567SQL_TSI_MINUTE | 2000-02-14 07:36:58.1234567SQL_TSI_SECOND | 2000-02-14 07:32:03.1234567SQL_TSI_FRAC_SECOND | 2000-02-14 07:31:58.1284567

Exempel 9 – Funktionen TIMESTAMPDIFF()

TIMESTAMPDIFF() funktion returnerar skillnaden mellan två datum/tid-värden. Denna funktion accepterar tre argument; intervallet (datum/tidsdel) för vilket skillnaden ska beräknas (t.ex. månad), det första datumet och det andra datumet. Funktionen returnerar antalet intervall som det första datumet är större än det andra datumet. Exempel nedan.

År, Kvartal, Månad, Vecka och Dag

DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(year, 1, @date1);VÄLJ {fn TIMESTAMPDIFF(SQL_TSI_YEAR, @date1, @date2)} SOM 'SQL_TSI_YEAR', {fn TIMESTAMPDIFF(SQL_TSI_QUARTER, @date1, '_SQR2)} ', {fn TIMESTAMPDIFF(SQL_TSI_MONTH, @date1, @date2)} SOM 'SQL_TSI_MONTH', {fn TIMESTAMPDIFF(SQL_TSI_WEEK, @date1, @date2)} AS 'SQL_TSI_WEEK', @fn TIMESTAMPDIFF, @date_DQTSIFF(SQL_TSI_WEEK, @date2)} } SOM 'SQL_TSI_DAY';

Resultat:

+----------------+------------------------+-------- --------+----------------+---------------+| SQL_TSI_YEAR | SQL_TSI_QUARTER | SQL_TSI_MONTH | SQL_TSI_WEEK | SQL_TSI_DAY ||----------------+------------------------+---------------- -------+----------------+--------------|| 1 | 4 | 12 | 52 | 366 |+----------------+--------------------+---------------- -------+----------------+---------------+

Timmar, minuter och sekunder

DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DEKLARERA @date2 datetime2 =DATEADD(day, 1, @date1);VÄLJ {fn TIMESTAMPDIFF(SQL_TSI_HOUR, @date1, @date2)} SOM 'SQL_TSI_HOUR', {fn TIMESTAMPDIFF(SQL_TSI_MINUTE, @date1, @SQL_ET2)} ', {fn TIMESTAMPDIFF(SQL_TSI_SECOND, @date1, @date2)} AS 'SQL_TSI_SECOND', {fn TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND, @date1, @date2)} AS 'SQL_TSI_FRAC_SECOND';

Resultat:

+----------------+------------------------+---------------- --------+------------------------------+| SQL_TSI_HOUR | SQL_TSI_MINUTE | SQL_TSI_SECOND | SQL_TSI_FRAC_SECOND ||----------------+------------------+---------------- -------+-----------------------------|| 24 | 1440 | 86400 | 86400000 |+----------------+------------------------+---------------- -------+------------------------------+


  1. Kolumn _ID finns inte fel även om den finns i tabellen

  2. Hur kontrollerar jag om en kolumn är tom eller null i MySQL?

  3. Vad är skillnaden mellan Integrated Security =True och Integrated Security =SSPI?

  4. Hur man filtrerar frågeresultat i PostgreSQL