Este artículo proporciona una referencia para los especificadores de formato de fecha y hora personalizados que se pueden usar al formatear fechas y/u horas usando FORMAT()
función en SQL Server, junto con ejemplos.
Puede combinar cualquiera de estos especificadores de formato para generar una cadena de formato personalizada. Consulte a continuación un ejemplo de código y una explicación sobre cómo funcionan las cadenas de formato personalizado.
Los ejemplos en la tabla asumen un datetimeoffset valor de 2080-05-01 23:09:08.1234567 +07:00
.
Cadena de formato | Descripción | Ejemplo |
---|---|---|
d | El día del mes, del 1 al 31. | 1 |
dd | El día del mes, del 01 al 31. | 01 |
ddd | El nombre abreviado del día de la semana. | miércoles |
dddd | El nombre completo del día de la semana. | miércoles |
f | Las décimas de segundo en un valor de fecha y hora. | 1 |
ff | Las centésimas de segundo en un valor de fecha y hora. | 12 |
fff | Los milisegundos en un valor de fecha y hora. | 123 |
ffff | Las diez milésimas de segundo en un valor de fecha y hora. | 1234 |
fffff | Las cien milésimas de segundo en un valor de fecha y hora. | 12345 |
ffffff | Las millonésimas de segundo en un valor de fecha y hora. | 123456 |
fffffff | Las diez millonésimas de segundo en un valor de fecha y hora. | 1234567 |
F | Si no es cero, las décimas de segundo en un valor de fecha y hora. | 1 |
FF | Si no es cero, las centésimas de segundo en un valor de fecha y hora. | 12 |
FFF | Si no es cero, los milisegundos en un valor de fecha y hora. | 123 |
FFFF | Si no es cero, las diezmilésimas de segundo en un valor de fecha y hora. | 1234 |
FFFFF | Si no es cero, las cien milésimas de segundo en un valor de fecha y hora. | 12345 |
FFFFFF | Si no es cero, las millonésimas de segundo en un valor de fecha y hora. | 123456 |
FFFFFFF | Si no es cero, las diez millonésimas de segundo en un valor de fecha y hora. | 1234567 |
g | El período o era. | AD |
gg | El período o era. | AD |
h | La hora, usando un reloj de 12 horas del 1 al 12. | 11 |
hh | La hora, usando un reloj de 12 horas de 01 a 12. | 11 |
H | La hora, utilizando un reloj de 24 horas de 0 a 23. | 23 |
HH | La hora, usando un reloj de 24 horas de 00 a 23. | 23 |
K | Información de zona horaria. | +07:00 |
m | El minuto, del 0 al 59. | 9 |
mm | El minuto, del 00 al 59. | 09 |
M | El mes, del 1 al 12. | 5 |
MM | El mes, del 01 al 12. | 05 |
MMM | El nombre abreviado del mes. | mayo |
MMMM | El nombre completo del mes. | mayo |
s | El segundo, del 0 al 59. | 8 |
ss | El segundo, del 00 al 59. | 08 |
t | El primer carácter del designador AM/PM. | P |
tt | El designador AM/PM. | PM |
y | El año, del 0 al 99. | 80 |
yy | El año, del 00 al 99. | 80 |
yyy | El año, con un mínimo de tres dígitos. | 2080 |
yyyy | El año como un número de cuatro dígitos. | 2080 |
yyyyy | El año como un número de cinco dígitos. | 02080 |
z | Horas diferenciadas de UTC, sin ceros a la izquierda. | +7 |
zz | Horas diferenciadas de UTC, con un cero inicial para un valor de un solo dígito. | +07 |
zzz | Horas y minutos compensados con UTC. | +07:00 |
: | El separador de tiempo. | : |
/ | El separador de fecha. | / |
"string" | Delimitador de cadena literal. | cadena |
% | Define el siguiente carácter como un especificador de formato personalizado. | |
\ | El carácter de escape. |
Cualquier otro carácter se copia en la cadena de resultados sin cambios.
Importante: Cuando utilice una cadena de formato personalizado de un solo carácter, debe anteponer el signo de porcentaje (%
). Alternativamente, puede agregar un espacio. Si no hace esto, obtendrá NULL o el especificador de formato podría interpretarse como un especificador de formato estándar y obtendrá resultados no deseados.
¿Qué son las cadenas de formato personalizado?
Una cadena de formato personalizado consta de uno o más especificadores de formato personalizado. La tabla anterior enumera los especificadores de formato personalizados disponibles para formatear valores de fecha y hora en una cadena.
También hay cadenas de formato de fecha y hora estándar. Cada uno de estos es un alias para una cadena de formato personalizado. Las cadenas de formato estándar constan de un único especificador de formato, por lo que son más rápidas de usar (pero menos flexibles que las cadenas de formato personalizado).
Cualquier cadena de formato que no sea una cadena de formato de fecha y hora estándar se interpreta como una cadena de formato de fecha y hora personalizado.
Ejemplo de uso
La forma en que funcionan los especificadores de formato personalizado es que puede combinarlos para formar una cadena de formato personalizado al usar FORMAT()
función. Esto determina cómo se formatea el resultado.
Estos son algunos ejemplos:
DECLARE @date datetimeoffset; SET @date = '2080-05-01 23:09:08.1234567 +07:00'; SELECT FORMAT(@date, 'd, MMM yy') AS 'd, MMM yy', FORMAT(@date, 'dd, MMMM yyyy') AS 'dd, MMMM yyyy', FORMAT(@date, 'dddd, MMM dd yyyy') AS 'dddd, MMM dd yyyy', FORMAT(@date, 'hh:mm:ss') AS 'hh:mm:ss', FORMAT(@date, 'hh:mm tt') AS 'hh:mm tt';
Resultado:
+-------------+-----------------+------------------------+------------+------------+ | d, MMM yy | dd, MMMM yyyy | dddd, MMM dd yyyy | hh:mm:ss | hh:mm tt | |-------------+-----------------+------------------------+------------+------------| | 1, May 80 | 01, May 2080 | Wednesday, May 01 2080 | 11:09:08 | 11:09 PM | +-------------+-----------------+------------------------+------------+------------+
Por lo tanto, permite mucha flexibilidad en la forma en que presenta sus fechas y horas.
Este es un ejemplo del uso de una cadena de formato que consta de un único especificador de formato.
DECLARE @date datetimeoffset; SET @date = '2080-05-01 23:09:08.1234567 +07:00'; SELECT FORMAT(@date, '%d') AS '%d', FORMAT(@date, '%M') AS '%M', FORMAT(@date, '%K') AS '%K', FORMAT(@date, '%z') AS '%z';
Resultado:
+------+------+--------+------+ | %d | %M | %K | %z | |------+------+--------+------| | 1 | 5 | +07:00 | +7 | +------+------+--------+------+
Como se mencionó, debe anteponerlos con un signo de porcentaje para evitar obtener NULL y para que el especificador de formato no se interprete inadvertidamente como una cadena de formato estándar.
Esto es lo que sucede si elimino el signo de porcentaje del ejemplo anterior:
DECLARE @date datetimeoffset; SET @date = '2080-05-01 23:09:08.1234567 +07:00'; SELECT FORMAT(@date, 'd') AS 'd', FORMAT(@date, 'M') AS 'M', FORMAT(@date, 'K') AS 'K', FORMAT(@date, 'z') AS 'z';
Resultado:
+----------+-------+------+------+ | d | M | K | z | |----------+-------+------+------| | 5/1/2080 | May 1 | NULL | NULL | +----------+-------+------+------+
Obtenemos un resultado completamente diferente.