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