Problema:
Le gustaría cambiar el formato de un campo de fecha o valor en una base de datos de SQL Server.
Ejemplo:
Nuestra base de datos tiene una tabla llamada Patient
con datos en las columnas Id
, FirstName
, LastName
y RegistrationDate
.
Id | Nombre | Apellido | Fecha de registro |
---|---|---|---|
1 | Jane | Williams | 2019-06-20 |
2 | Gabriel | Marrón | 2019-02-02 |
3 | Lora | Folk | 2016-11-05 |
Cambiemos el formato de la fecha de registro de cada paciente. Pondremos primero el nombre del día de la semana, seguido del día y el nombre del mes y un año de 4 dígitos (por ejemplo, "Viernes, 27 de diciembre de 2019").
Solución:
Usaremos la función FORMAT() para cambiar el formato de la fecha en RegistrationDate
columna.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy') AS FormattedRegistrationDate FROM Patient;
Este es el resultado de la consulta:
Nombre | Apellido | Fecha de registro formateada |
---|---|---|
Jane | Williams | jueves, 20 junio, 2019 |
Gabriel | Marrón | sábado, 2 de febrero de 2019 |
Lora | Folk | Sábado, 5 de noviembre de 2016 |
Discusión:
Podemos cambiar cómo se muestra una fecha dada con la función FORMAT(). Esta función toma dos argumentos obligatorios y un argumento opcional. En nuestro ejemplo, usamos solo los dos argumentos obligatorios. La primera es una fecha, que puede ser de una columna de fecha/hora/fechahora o cualquier expresión que devuelva una fecha u hora. (En nuestro ejemplo, usamos la columna RegistrationDate
.) El segundo argumento es una cadena que contiene el nuevo formato de fecha. En nuestro ejemplo, usamos 'dddd, dd MMMM, yyyy' :
- dddd – El nombre del día de la semana.
- d – El día del mes, del 1 al 31.
- MMMM – El nombre completo del mes.
- aaaa – El año de cuatro dígitos.
La siguiente tabla presenta más especificadores de formato de fecha/hora:
especificador | descripción |
---|---|
d | Día en el rango 1-31 |
dd | Día en el rango 01-31 |
ddd | El nombre abreviado del día de la semana |
dddd | El nombre completo del día de la semana |
M | Mes del 1 al 12 |
MM | Mes del 01 al 12 |
MMM | El nombre abreviado del mes |
MMMM | El nombre completo del mes |
y | año de 2 dígitos, de 0 a 99 |
aa | año de 2 dígitos de 00 a 99 |
aaaa | año de 4 dígitos |
g | Era (p. ej., d.C.) |
h | Hora de 1 a 12 (reloj de 12 horas) |
hh | Hora de 01 a 12 (reloj de 12 horas) |
H | Hora de 0 a 23 (reloj de 24 horas) |
HH | Hora de 00 a 23 (reloj de 24 horas) |
m | Minuto de 0 a 59 |
mm | Minuto de 00 a 59 |
s | Segundo de 0 a 59 |
ss | Segundo de 00 a 59 |
t | Primer carácter de AM o PM (por ejemplo, 9A, 5P) |
tt | AM o PM |
z | Compensación de horas, sin cero inicial (por ejemplo, +3) |
zz | Compensación de horas, con cero inicial (por ejemplo, +03) |
Puede obtener más información en la documentación de Microsoft sobre formatos de fecha y hora estándar y formatos personalizados.
Si desea formatear esta fecha para un idioma o país específico, use el tercer argumento opcional:cultura . Este argumento es una cadena que contiene el código cultural de una región o país en particular. (Los códigos culturales se componen de un código de idioma, un guión y un código de país). En el siguiente ejemplo, usamos el código cultural de Alemania, que combina el código de idioma alemán ('de') con el código de país de Alemania. ('DE'), es decir, 'de-DE'. La fecha resultante se muestra en alemán y tiene el formato que la audiencia alemana esperaría ver.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy', 'de-DE') AS FormattedRegistrationDate FROM Patient;
Este es el resultado de esta consulta:
Nombre | Apellido | Fecha de registro |
---|---|---|
Jane | Williams | Donnerstag, 20 de junio de 2019 |
Gabriel | Marrón | Samstag, 2 de febrero de 2019 |
Lora | Folk | Samstag, 5 de noviembre de 2016 |