En SQL Server, la función T-SQL DATENAME()
devuelve una cadena de caracteres que representa la parte de la fecha especificada. Por ejemplo, puede pasar 2021-01-07
y hacer que SQL Server devuelva sólo la parte del mes (January
).
El tipo de retorno de DATENAME()
es nvarchar.
Ejemplos siguientes.
Sintaxis
La sintaxis de DATENAME()
es la siguiente:
DATENAME ( datepart , date )
Donde datepart
es la parte de date
(un valor de fecha u hora) para la que se devolverá una cadena de caracteres.
Ejemplo 1
Aquí hay un ejemplo básico en el que devuelvo el componente del mes de una fecha.
SELECT DATENAME(month, '2021-01-07') AS Result;
Resultado:
+----------+| Result ||----------|| January |+----------+
Ejemplo 2
En este ejemplo asigno una fecha a una variable, luego utilizo múltiples instancias de DATEPART()
para recuperar diferentes partes de esa fecha.
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';SELECT DATENAME(year, @date) AS Year, DATENAME(quarter, @date) AS Quarter, DATENAME(month, @date) AS Month, DATENAME(dayofyear, @date) AS 'Day of Year', DATENAME(day, @date) AS Day, DATENAME(week, @date) AS Week, DATENAME(weekday, @date) AS Weekday;
Resultado:
+--------+-----------+---------+---------------+-------+--------+-----------+| Year | Quarter | Month | Day of Year | Day | Week | Weekday ||--------+-----------+---------+---------------+-------+--------+-----------|| 2018 | 2 | June | 153 | 2 | 22 | Saturday |+--------+-----------+---------+---------------+-------+--------+-----------+
Ejemplo 3
También puedes recuperar las distintas partes de tiempo de la fecha.
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';SELECT DATENAME(hour, @date) AS Hour, DATENAME(minute, @date) AS Minute, DATENAME(second, @date) AS Second, DATENAME(millisecond, @date) AS Millsecond, DATENAME(microsecond, @date) AS Microsecond, DATENAME(nanosecond, @date) AS Nanosecond;
Resultado:
+--------+----------+----------+--------------+---------------+--------------+| Hour | Minute | Second | Millsecond | Microsecond | Nanosecond ||--------+----------+----------+--------------+---------------+--------------|| 8 | 24 | 14 | 311 | 311204 | 311204200 |+--------+----------+----------+--------------+---------------+--------------+
Ejemplo 4
También puede recuperar la parte de la fecha TZoffset
y la parte de la fecha ISO_WEEK
.
La parte TZoffset
se devuelve como el número de minutos (con signo). La parte de la fecha ISO_WEEK
se refiere al sistema de fecha de la semana ISO (parte de la norma ISO 8601), que es un sistema de numeración para las semanas.
DECLARE @date datetimeoffset = '2018-06-02 08:24:14.3112042 +08:00';SELECT DATENAME(TZoffset, @date) AS 'Time Zone Offset', DATENAME(ISO_WEEK, @date) AS 'ISO_WEEK';
Resultado:
+--------------------+------------+| Time Zone Offset | ISO_WEEK ||--------------------+------------|| +08:00 | 22 |+--------------------+------------+
En este ejemplo, establecí la fecha en un formato datetimeoffset
, que incluye el desplazamiento de la zona horaria. El TZoffset
se devuelve en minutos.
Los resultados de DATENAME()
suelen parecerse a los de DATEPART()
(debido a que la mayoría de las partes de la fecha son numéricas). Sin embargo, DATEPART()
devuelve un número entero en lugar de una cadena de caracteres. Por lo tanto, DATEPART()
devolverá los meses (y el componente del día de la semana) en forma numérica (por ejemplo, 1
en lugar de January
).
Obtención del nombre abreviado del mes
Si necesita el nombre del mes, pero en su forma abreviada de 3 letras (por ejemplo, Jan
en lugar de January
), consulte mi artículo 5 maneras de obtener el nombre abreviado del mes de una fecha en SQL Server.