09 novembre 2018

SQL - Les Formats de date et heure

Vous galérez pas à trouver le bon format pour convertir les dates en texte dans SQL Server vous ?
Moi Oui !!
Du coup j'utilise la requête ci-dessous pour trouver le bon format en fonction de mes besoins :

DECLARE @date DATETIME
SET @date = GETDATE() --- la date que vous voulez !!
SELECT format, CONVERT(NVARCHAR(MAX), @date, format)
FROM (SELECT ROW_NUMBER() OVER(ORDER BY object_id) - 1 AS format
FROM sys.all_objects) x
WHERE format < 132 
  AND format NOT IN (15, 16, 17, 18, 19, 115, 116, 117, 118, 119, 122, 123, 124, 125, 128, 129) 
  AND (format < 26 OR format > 99 )


On compte le nombre de ligne de sys.all_objets ou de n'importe quelle table qui a plus de 132 lignes !!
Puis on exclus les ID non valides de la fonction convert
Puis on affiche toutes les conversions possibles.

La doc SQL SERVER de la fonction CONVERT est ici


Plus sexy avec une CTE récursive :
DECLARE @date DATETIME
SET @date = GETDATE()
;
WITH nombre (idx)
 AS (SELECT 0 AS idx
     UNION ALL SELECT idx + 1 FROM nombre WHERE idx < 131)
SELECT idx AS format, CONVERT(NVARCHAR(MAX), @date, idx) FROM nombre 
WHERE idx NOT IN (15, 16, 17, 18, 19, 115, 116, 117, 118, 119, 122, 123, 124, 125, 128, 129) 
  AND (idx < 26 OR idx> 99 )
OPTION(maxrecursion 132)

A noter le ; avant le WITH De la CTE
A noter aussi on utilise la clause OPTION pour augmenter la profondeur de récursion car ici on a besoin d'une profondeur connue de 132



Enjoy !

Aucun commentaire:

Enregistrer un commentaire