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

ODBC-skalarfunktioner for dato og klokkeslæt i SQL Server (T-SQL-eksempler)

Du kan bruge ODBC-skalarfunktioner, når du kører T-SQL-sætninger i SQL Server. Der er forskellige typer ODBC-skalarfunktioner, herunder strengfunktioner, numeriske funktioner, systemfunktioner og selvfølgelig dato/tidsfunktioner (også kaldet dato-, klokkeslæts- og intervalfunktioner).

Nedenfor er eksempler på de dato-, tids- og intervalfunktioner, du kan bruge i SQL Server.

Syntaks

For det første, her er den syntaks, du skal bruge, når du kalder en ODBC-skalarfunktion:

VÆLG {fn  [(,....n) ] }

Hvor er navnet på funktionen og (,....n) er et hvilket som helst antal valgfrie argumenter.

Så den vigtigste ting at huske er, at når du kalder en ODBC-skalarfunktion, skal du omslutte funktionskaldet inden for krøllede parenteser ({} ) og præfiks navnet med fn .

Eksempel 1 – NU()

Denne funktion returnerer aktuel dato og klokkeslæt som en tidsstempelværdi.

VÆLG {fn NOW()} SOM Resultat;

Resultat:

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

Eksempel 2 – Tidsstempel, dato og klokkeslæt

CURRENT_TIMESTAMP() funktion returnerer den aktuelle lokale dato og lokal tid som en tidsstempelværdi. Du kan også bruge CURRENT_DATE() for kun at returnere datodelen og/eller CURRENT_TIME() for kun at returnere tidsdelen.

VÆLG {fn CURRENT_TIMESTAMP()} SOM 'Dato og tid', {fn CURRENT_DATE()} SOM 'Dato', {fn CURRENT_TIME()} SOM 'Tid';

Resultat:

+------------------------+-------+------ -------+| Dato og tid | Dato | Tid ||------------------------+------------+-------- ------|| 2018-06-13 21:57:29.197 | 2018-06-13 | 21:57:29.197 |+-------------------------+-----------+---- ----------+

Også CURRENT_TIMESTAMP() og CURRENT_TIME() begge accepterer et valgfrit argument for at bestemme sekunders præcision af den returnerede værdi.

Eksempler:

VÆLG {fn CURRENT_TIMESTAMP(3)} SOM 'Dato og tid', {fn CURRENT_TIME(6)} SOM 'Tid';

Resultat:

+------------------------+-----------------+| Dato og tid | Tid ||------------------------+----------------|| 2018-06-13 22:00:59.263 | 22:00:59.263000 |+------------------------+---------------- +

I dette eksempel, CURRENT_TIMESTAMP() returnerer en sekunders præcision på 3, mens CURRENT_TIME() returnerer en sekunders præcision på 6.

Eksempel 3 – CURDATE() og CURTIME()

Du kan bruge CURDATE() og/eller CURTIME() som et alternativ til ovenstående dato- og tidsfunktioner:

VÆLG {fn CURDATE()} SOM 'Dato', {fn CURTIME()} SOM 'Tid';

Resultat:

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

Bemærk, at disse argumenter ikke accepterer nogen argumenter, så hvis du har brug for at angive sekunders præcision, skal du bruge CURRENT_DATE() og/eller CURRENT_TIME() i stedet.

Eksempel 4 – dage og uger

Der er en masse ODBC-skalarfunktioner til at returnere specifikke dele af en datoværdi. Disse funktioner accepterer et argument, som er datoudtrykket at udtrække den ønskede datodel fra.

Her er de forskellige funktioner til at returnere dagene og ugerne fra datoen:

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÆLG {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:

+-------+------------------+----- --------+--------+| DAYNAME | DAGÅR | DAG I MÅNED | UGEDAG | UGE ||---------------------------------------- -------+--------|| mandag | 45 | 14 | 2 | 8 |+------------+-------------------------- -------+--------+

I dette tilfælde tildelte vi en dato til en variabel, og sendte derefter denne variabel til hver funktion. Funktionen returnerede derefter den relevante datodel.

Eksempel 5 – Måneder, kvartaler og år

Her er de forskellige funktioner til at returnere måneder, kvartaler og år fra dato/tidsværdien:

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

Resultat:

+--------+---------+-------------+-----------+| ÅR | MÅNED | MÅNEDSNAVN | KVARTAL ||--------+---------+----------------|| 2000 | 2 | februar | 1 |+--------+---------+-------------+-----------+ 

Eksempel 6 – Timer, minutter og sekunder

Her er de forskellige funktioner til at returnere timer, minutter og sekunder fra dato/tidsværdien:

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

Resultat:

+--------+----------+----------+| TIME | MINUTE | ANDEN ||--------+----------+--------|| 7 | 31 | 58 |+--------+-----------+----------+

Eksempel 7 – EXTRACT()-funktionen

Der er også en ODBC-skalarfunktion kaldet EXTRACT() , som giver dig mulighed for at udtrække de forskellige datodele fra dato/tidsværdien. Eksempler nedenfor.

År, måned og dag

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

Resultat:

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

Timer, minutter og sekunder

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

Resultat:

+--------+----------+----------+| TIME | MINUTE | ANDEN ||--------+----------+--------|| 7 | 31 | 58 |+--------+-----------+----------+

Eksempel 8 – Funktionen TIMESTAMPADD()

 TIMESTAMPADD() giver dig mulighed for at tilføje et specificeret antal af det angivne interval (dato/tidsdel) til dato/tidsværdien. Denne funktion accepterer tre argumenter; intervallet (dato/tidsdel), der skal tilføjes (f.eks. måned), antallet af den del, der skal tilføjes, og datoværdien. Eksempler nedenfor.

År, Kvartal, Måned og Dag

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÆLG {fn TIMESTAMPADD(SQL_TSI_YEAR, 21, @date)} SOM 'SQL_TSI_YEAR', {fn TIMESTAMPADTSI_1QR. } 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

Timer, minutter og sekunder

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VÆLG {fn TIMESTAMPADD(SQL_TSI_HOUR, 5, @date)} SOM 'SQL_TSI_HOUR', {fn TIMESTAMPADDSI_MINUTLED,SQL_TSI_HOUR, } SOM 'SQL_TSI_MINUTE', {fn TIMESTAMPADD(SQL_TSI_SECOND, 5, @date)} SOM 'SQL_TSI_SECOND', {fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, 5, @date)} SOM 'SQACL_SECOND_'; 

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

Eksempel 9 – Funktionen TIMESTAMPDIFF()

TIMESTAMPDIFF() funktion returnerer forskellen mellem to dato/tidsværdier. Denne funktion accepterer tre argumenter; intervallet (dato/tidsdel), som forskellen skal beregnes for (f.eks. måned), den første dato og den anden dato. Funktionen returnerer antallet af intervaller, som den første dato er større end den anden dato Eksempler nedenfor.

År, Kvartal, Måned, Uge og Dag

DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(year, 1, @date1);VÆLG {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, @dato_TSI_WEEK(SQL_TSI_WEEK', @fn TIMESTAMPDIFF, @dato_dato,2dato) } 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 |+----------------+--------------------+---------------- -------+----------------+---------------+

Timer, minutter og sekunder

DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(dag, 1, @date1);VÆLG {fn TIMESTAMPDIFF(SQL_TSI_HOUR, @date1, @date2)} SOM 'SQL_TSI_HOUR', {fn TIMESTAMPDIFF(SQL_TSI_MINUTE, @date1, 'SQL_UT2)} ', {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. Få årets dag fra en dato i SQL Server (T-SQL)

  2. Sådan slettes identitetsegenskaber for en kolonne i SQL Server-tabel - SQL Server / T-SQL vejledning 44

  3. Kan du ikke bruge en LIKE-forespørgsel i en JDBC PreparedStatement?

  4. MySQL DEGREES() Funktion – Konverter fra radianer til grader