T-SQL

T-SQL propose de nombreuses fonctions pour manipuler les données. Elles retournent une seule valeur ou une table et facilitent énormément la vie du développeur. En voici quelques unes:

Les fonctions de date

Elles permettent de récupérer la date courante sous différents formats, d’extraire une partie de la date, d’effectuer des opérations…

Les fonctions GETDATE, CURRENT_TIMESTAMP, SYSDATETIME et SYSDATETIMEOFFSET donnent la date et l’heure courantes. GETDATE et CURRENT_TIMESTAMP: date et heure de l’instance SQL Server à laquelle on est connecté. SYSDATETIME et SYSDATETIMEOFFSET font la même chose mais au format DATETIME2 pour le premier et DATETIMEOFFSET pour le second.

DATEPART permet d’extraire une partie de notre date.

Par exemple

SELECT DATEPART(month, '20170621') 

retourne 6.

Il est possible d’utiliser les fonctions YEAR, MONTH et DAY pour récupérer l’année, le mois et le jour.

Par exemple

SELECT DAY('20170621')

renvoie 21.

Avec DATENAME, il est possible de récupérer le mois en toute lettre.

SELECT DATENAME(month, '20170621') 

donne ‘June’, si votre serveur est en anglais.

T-SQL propose de nombreuses fonctions pour construire une date à partir de ses composants numériques.
Par exemple

SELECT DATEFROMPARTS(2017, 6, 21) 

renvoie la date 2017-06-21.

En fonction du type désiré en retour, on utilisera les alternatives DATETIME2FROMPARTS, DATETIMEFROMPARTS, DATETIMEOFFSETFROMPARTS

EOMONTH renvoie la date de la fin du mois de la date passée en paramètre. Ainsi EOMONTH(‘20170621’) renverra 2017-06-30.

DATEADD et DATEDIFF permettent d’effectuer des additions et des soustractions sur les dates.

Par exemple DATEADD(year, 3, ‘20170621’) ajoute 3 ans à la date 2017-06-21 et renvoie le résultat 2020-06-21 00:00:00.000.

DATEDIFF(day,’20160212′, ‘20190315’) renvoie la différence en jours entre 2016-02-12 et 2019-03-15 (2019-03-15 – 2016-02-12).

Fonctions sur les chaines de caractères

SQl Server dispose de nombreuses fonctions pour manipuler les chaines de caractères.
Par exemple pour concaténer deux chaines, on à le choix entre l’opérateur + et la fonction CONCAT.

SELECT TOP 10 [FirstName] + ' ' + [LastName]
FROM [Person].[Person] order by ModifiedDate

CONCAT donnerait le même résultat avec la requête suivante

 
SELECT TOP 10 CONCAT( [FirstName] , ' ' , [LastName])
FROM [Person].[Person] order by ModifiedDate

La seule différence est que CONCAT remplace NULL par une chaine vide.

SUBSTRING extrait une sous chaine de caractère d’une autre chaine. La fonction prend trois paramètres, le premier est la chaine de caractère sur laquelle on veut extraitre une sous chaine, le deuxième est la position de départ et le troisième la longueur de la chaine à extraire.

Exemple: SUBSTRING(‘abcde’, 3, 3) retourne bcd.

REPLACE remplace toutes les occurrences de la chaine en argument 1 dans la chaine en argument 2 par la chaine en argument 3. 🙂

Exemple: REPLACE(‘aabbccbbaa’, ‘aa’, ‘AA’) renvoie AAbbccbbAA.

LEFT et RIGHT renvoie un certain nombre caractères à partir de la gauche ou à partir de la droite.
LEFT(‘abcde’, 2) envoie ‘ab’ et RIGHT(‘abcde’, 2) returns ‘de’.

CHARINDEX renvoie la position de la première aucune d’une chaine dans une autre.
Ex: CHARINDEX(‘an’, ‘Jean Pierre’) renvoie 3.

LEN nous donne le nombre de caractères de la chaine. LEN(‘toto’) renvoie 4.

D’autres fonctions valent le détour, UPPER et LOWER convertissent une chaine en majuscules et en minuscules. LTRIM et RTRIM enlèvent les espaces précédant et suivant la chaîne passée en paramètre.

Les fonctions de conversion

D’autres fonctions dont on ne peut se passer en T-SQL sont les fonctions de conversion. Les principales sont CAST et CONVERT.
La syntaxe de CAST: CAST(expression AS type). Exemple CAST(’10’ AS INT).

La différence entre CAST et CONVERT est que CONVERT permet de préciser le style. Par exemple pour les dates. Si je veux afficher la date 01/02/2019 et préciser que c’est une date française, j’utilise CONVERT(DATE, ’01/02/2019′ , 103). Le résultat sera différent du style US CONVERT(DATE, ’01/02/2019′ , 101)

Lorsque la conversion échoue, il y a un message d’erreur et l’exécution de la requête échoue. Pour éviter cela, privilégier TRY_CAST et TRY_CONVERT qui retourne NULL lorsque la conversion échoue.

Photo credit: therefromhere on Visual hunt / CC BY-NC-SA

Auteur : Daniel MINKO FASSINOU