Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonctions scalaires ODBC pour la date et l'heure dans SQL Server (exemples T-SQL)

Vous pouvez utiliser les fonctions scalaires ODBC lors de l'exécution d'instructions T-SQL dans SQL Server. Il existe différents types de fonctions scalaires ODBC, notamment les fonctions de chaîne, les fonctions numériques, les fonctions système et, bien sûr, les fonctions de date/heure (également appelées fonctions de date, d'heure et d'intervalle).

Vous trouverez ci-dessous des exemples de fonctions de date, d'heure et d'intervalle que vous pouvez utiliser dans SQL Server.

Syntaxe

Tout d'abord, voici la syntaxe que vous devez utiliser chaque fois que vous appelez une fonction scalaire ODBC :

SELECT {fn  [ (,....n) ] }

<function_name> est le nom de la fonction et (<argument>,....n) est un nombre quelconque d'arguments facultatifs.

Ainsi, la principale chose à retenir est que lorsque vous appelez une fonction scalaire ODBC, vous devez placer l'appel de fonction entre accolades ({} ) et préfixez le nom avec fn .

Exemple 1 – MAINTENANT()

Cette fonction renvoie la date et l'heure actuelles sous forme de valeur d'horodatage.

SELECT {fn NOW()} AS Result ;

Résultat :

+-------------------------+| Résultat ||-------------------------|| 2018-06-13 21:52:25.667 |+-------------------------+

Exemple 2 :Horodatage, date et heure

Le CURRENT_TIMESTAMP() La fonction renvoie la date et l'heure locales actuelles sous forme de valeur d'horodatage. Vous pouvez également utiliser le CURRENT_DATE() pour renvoyer uniquement la partie date, et/ou CURRENT_TIME() pour renvoyer uniquement la partie heure.

SELECT {fn CURRENT_TIMESTAMP()} AS 'Date &Heure', {fn CURRENT_DATE()} AS 'Date', {fn CURRENT_TIME()} AS 'Heure' ;

Résultat :

+--------------------+------------+------- -------+| Date et heure | Rendez-vous | Heure ||-------------------------+------------+-------- ------|| 2018-06-13 21:57:29.197 | 2018-06-13 | 21:57:29.197 |+-------------------------+------------+---- ----------+

Aussi, CURRENT_TIMESTAMP() et CURRENT_TIME() les deux acceptent un argument facultatif pour déterminer la précision en secondes de la valeur renvoyée.

Exemples :

SELECT {fn CURRENT_TIMESTAMP(3)} AS 'Date et heure', {fn CURRENT_TIME(6)} AS 'Heure' ;

Résultat :

+-------------------------+-----------------+| Date et heure | Heure ||--------------------+------------------------------|| 2018-06-13 22:00:59.263 | 22:00:59.263000 |+-------------------------+------------------------------ +

Dans cet exemple, CURRENT_TIMESTAMP() renvoie une précision de secondes de 3, tandis que CURRENT_TIME() renvoie une précision de 6 secondes.

Exemple 3 – CURDATE() et CURTIME()

Vous pouvez utiliser CURDATE() et/ou CURTIME() comme alternative aux fonctions de date et d'heure ci-dessus :

SELECT {fn CURDATE()} AS 'Date', {fn CURTIME()} AS 'Heure' ;

Résultat :

+------------+--------------+| Rendez-vous | Heure ||------------+--------------|| 2018-06-13 | 22:05:20.013 |+------------+----------------------+

Notez que ces arguments n'acceptent aucun argument, donc si vous devez spécifier la précision en secondes, utilisez CURRENT_DATE() et/ou CURRENT_TIME() à la place.

Exemple 4 - Jours et semaines

Il existe un tas de fonctions scalaires ODBC pour renvoyer des parties spécifiques d'une valeur de date. Ces fonctions acceptent un argument, qui est l'expression de date à partir de laquelle extraire la partie de date souhaitée.

Voici les différentes fonctions permettant de retourner les jours et semaines partant de la date :

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

Résultat :

+-----------+-------------+--------------+----- --------+--------+| NOMJOUR | JOUR DE L'ANNEE | JOUR DU MOIS | JOUR DE LA SEMAINE | SEMAINE ||-----------+-------------+-------------+------ -------+--------|| lundi | 45 | 14 | 2 | 8 |+-----------+-------------+-------------+------ -------+--------+

Dans ce cas, nous avons attribué une date à une variable, puis nous avons passé cette variable à chaque fonction. La fonction a ensuite renvoyé la partie de date applicable.

Exemple 5 - Mois, Trimestres et Années

Voici les différentes fonctions permettant de renvoyer les mois, trimestres et années à partir de la valeur date/heure :

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn YEAR(@date)} AS 'YEAR', {fn MONTH(@date)} AS 'MONTH', {fn MONTHNAME(@date)} AS 'MONTHNAME', {fn QUARTER(@date)} AS 'TRIMESTRE' ;

Résultat :

+--------+---------+-------------+------------+| ANNEE | MOIS | NOM DU MOIS | TRIMESTRE ||--------+---------+-------------+------------|| 2000 | 2 | février | 1 |+--------+---------+-------------+------------+ 

Exemple 6 – Heures, minutes et secondes

Voici les différentes fonctions permettant de renvoyer la partie heures, minutes et secondes à partir de la valeur date/heure :

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn HOUR(@date)} AS 'HOUR', {fn MINUTE(@date)} AS 'MINUTE', {fn DEUXIÈME(@date)} COMME 'DEUXIÈME';

Résultat :

+--------+----------+----------+| HEURE | MINUTES | SECONDE ||--------+----------+----------|| 7 | 31 | 58 |+--------+----------+----------+

Exemple 7 - La fonction EXTRACT()

Il existe également une fonction scalaire ODBC appelée EXTRACT() , qui vous permet d'extraire les différentes parties de date à partir de la valeur date/heure. Exemples ci-dessous.

Année, mois et jour

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

Résultat :

+--------+---------+-------+| ANNEE | MOIS | JOUR ||--------+---------+-------|| 2000 | 2 | 14 |+--------+---------+-------+

Heures, minutes et secondes

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

Résultat :

+--------+----------+----------+| HEURE | MINUTES | SECONDE ||--------+----------+----------|| 7 | 31 | 58 |+--------+----------+----------+

Exemple 8 - La fonction TIMESTAMPADD()

Le TIMESTAMPADD() vous permet d'ajouter un nombre spécifié de l'intervalle spécifié (partie date/heure) à la valeur date/heure. Cette fonction accepte trois arguments ; l'intervalle (partie date/heure) à ajouter (par exemple, le mois), le numéro de cette partie à ajouter et la valeur de date. Exemples ci-dessous.

Année, Trimestre, Mois et Jour

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

Résultat :

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

Heures, minutes et secondes

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

Résultat :

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

Exemple 9 - La fonction TIMESTAMPDIFF()

Le TIMESTAMPDIFF() La fonction renvoie la différence entre deux valeurs de date/heure. Cette fonction accepte trois arguments ; l'intervalle (partie date/heure) pour lequel calculer la différence (par exemple mois), la première date et la deuxième date. La fonction renvoie le nombre d'intervalles pendant lesquels la première date est supérieure à la seconde. Exemples ci-dessous.

Année, Trimestre, Mois, Semaine et Jour

DÉCLARER @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(year, 1, @date1);SELECT {fn TIMESTAMPDIFF(SQL_TSI_YEAR, @date1, @date2)} AS 'SQL_TSI_YEAR', {fn TIMESTAMPDIFF(SQL_TSI_QUARTER, @date1, @date2)} AS 'SQL_TSI_QUARTER ', {fn TIMESTAMPDIFF(SQL_TSI_MONTH, @date1, @date2)} AS 'SQL_TSI_MONTH', {fn TIMESTAMPDIFF(SQL_TSI_WEEK, @date1, @date2)} AS 'SQL_TSI_WEEK', {fn TIMESTAMPDIFF(SQL_TSI_DAY, @date1, @date2) } AS 'SQL_TSI_DAY' ;

Résultat :

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

Heures, minutes et secondes

DÉCLARER @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(day, 1, @date1);SELECT {fn TIMESTAMPDIFF(SQL_TSI_HOUR, @date1, @date2)} AS 'SQL_TSI_HOUR', {fn TIMESTAMPDIFF(SQL_TSI_MINUTE, @date1, @date2)} AS 'SQL_TSI_MINUTE ', {fn TIMESTAMPDIFF(SQL_TSI_SECOND, @date1, @date2)} AS 'SQL_TSI_SECOND', {fn TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND, @date1, @date2)} AS 'SQL_TSI_FRAC_SECOND';

Résultat :

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