sql >> Base de Datos >  >> RDS >> Sqlserver

Recuerde esto al formatear un tipo de datos TIME en SQL Server (T-SQL)

En SQL Server, cuando usa T-SQL FORMAT() función para dar formato a una hora tipo de datos, debe recordar escapar de los dos puntos o puntos en su cadena de formato.

Esto se debe a que FORMAT() La función se basa en las reglas de formato de CLR, que dictan que se deben escapar los dos puntos y los puntos. Por lo tanto, cuando la cadena de formato (segundo parámetro) contiene dos puntos o un punto, los dos puntos o el punto se deben escapar con una barra invertida cuando un valor de entrada (primer parámetro) es de la hora. tipo de datos.

Ejemplo 1:escapar de dos puntos

Este es un ejemplo básico del uso de FORMAT() función para dar formato a una hora tipo de datos.

SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;

Resultado:

+----------+
| Result   |
|----------|
| 11:28    |
+----------+

Tenga en cuenta la barra invertida en la cadena de formato.

Ejemplo 2:escapar de un período

Lo mismo se aplica si queremos formatearlo con un punto:

SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;

Resultado:

+----------+
| Result   |
|----------|
| 11.28    |
+----------+

Ejemplo 3:sin escape

Esto es lo que sucede si no escapamos del colon o del punto.

SELECT 
  FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon',
  FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';

Resultado:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| NULL              | NULL               |
+-------------------+--------------------+

Obtenemos NULL en ambos casos.

Ejemplo 4:fecha y hora (no es necesario escapar)

Solo necesita escapar de los dos puntos y el punto si el valor de entrada es del tipo de datos hora . Si es datetime (o fechahora2 etc.), no necesitas escapar de ellos.

Si utilizo el ejemplo anterior, pero cambio los valores de entrada a datetime2 , obtenemos el resultado deseado sin necesidad de escapar nada:

SELECT 
  FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon',
  FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';

Resultado:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| 11:28             | 11.28              |
+-------------------+--------------------+

Lo mismo se aplica a sysdatetime :

SELECT 
  FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon',
  FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';

Resultado:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| 04:46             | 04.46              |
+-------------------+--------------------+