In SQL Server, quando si utilizza T-SQL FORMAT()
funzione per formattare un ora tipo di dati, è necessario ricordare di evitare i due punti o i punti nella stringa di formato.
Questo perché il FORMAT()
la funzione si basa sulle regole di formattazione CLR, che impongono di eseguire l'escape dei due punti e dei punti. Pertanto, quando la stringa di formato (secondo parametro) contiene due punti o un punto, i due punti o il punto devono essere sottoposti a escape con una barra rovesciata quando un valore di input (primo parametro) è del tempo tipo di dati.
Esempio 1:sfuggire a due punti
Ecco un esempio di base dell'utilizzo di FORMAT()
funzione per formattare un ora tipo di dati.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
Risultato:
+----------+ | Result | |----------| | 11:28 | +----------+
Nota la barra rovesciata nella stringa di formato.
Esempio 2:sfuggire a un periodo
La stessa cosa vale se vogliamo formattarlo con un punto:
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
Risultato:
+----------+ | Result | |----------| | 11.28 | +----------+
Esempio 3 – Senza escape
Ecco cosa succede se non sfuggiamo ai due punti o al ciclo.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
Risultato:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
Otteniamo NULL
in entrambi i casi.
Esempio 4 – Datetime (non c'è bisogno di escape)
Devi solo eseguire l'escape dei due punti e del punto se il valore di input è di tipo di dati ora . Se è data e ora (o dataora2 ecc), non è necessario sfuggirli.
Se utilizzo l'esempio precedente, ma cambio i valori di input su datetime2 , otteniamo il risultato desiderato senza bisogno di sfuggire a nulla:
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
Risultato:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
Lo stesso vale per sysdatetime :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
Risultato:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+