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

Cadenas de formato de fecha/hora personalizadas admitidas por FORMAT() en SQL Server

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.