Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ricordalo durante la formattazione di un tipo di dati TIME in SQL Server (T-SQL)

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              |
+-------------------+--------------------+