Dans SQL Server, lorsque vous utilisez le T-SQL FORMAT()
fonction pour formater une heure type de données, vous devez vous rappeler d'échapper les deux-points ou les points dans votre chaîne de format.
En effet, le FORMAT()
La fonction s'appuie sur les règles de formatage CLR, qui dictent que les deux-points et les points doivent être échappés. Par conséquent, lorsque la chaîne de format (deuxième paramètre) contient un deux-points ou un point, les deux-points ou le point doivent être échappés avec une barre oblique inverse lorsqu'une valeur d'entrée (premier paramètre) est de l'heure Type de données.
Exemple 1 - Échapper à un côlon
Voici un exemple basique d'utilisation du FORMAT()
fonction pour formater une heure type de données.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
Résultat :
+----------+ | Result | |----------| | 11:28 | +----------+
Notez la barre oblique inverse dans la chaîne de format.
Exemple 2 - Échapper à une période
La même chose s'applique si nous voulons le formater avec un point :
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
Résultat :
+----------+ | Result | |----------| | 11.28 | +----------+
Exemple 3 – Sans échappement
Voici ce qui se passe si nous n'échappons pas au côlon ou aux règles.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
Résultat :
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
Nous obtenons NULL
dans les deux cas.
Exemple 4 - Datetime (pas besoin d'échapper)
Vous n'avez besoin d'échapper les deux-points et le point que si la valeur d'entrée est de type de données heure . Si c'est datetime (ou datetime2 etc), vous n'avez pas besoin de leur échapper.
Si j'utilise l'exemple précédent, mais changez les valeurs d'entrée en datetime2 , nous obtenons le résultat souhaité sans avoir besoin d'échapper quoi que ce soit :
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
Résultat :
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
Il en va de même pour sysdatetime :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
Résultat :
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+