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

SQL Server DATEPART() vs DATENAME() - ¿Cuál es la diferencia?

Al trabajar con fechas en SQL Server, a veces puede encontrarse buscando el DATEPART() función, solo para darte cuenta de que lo que realmente necesitas es el DATENAME() función. Entonces puede haber otras situaciones en las que DATEPART() en realidad es preferible a DATENAME() .

Entonces, ¿cuál es la diferencia entre DATEPART()DATENAME() funciones?

Vamos a averiguarlo.

Definiciones

La diferencia entre estas dos funciones está en sus definiciones:

DATEPART()
Devuelve un entero que representa el datepart especificado de la fecha especificada .
DATENAME()
Devuelve una cadena de caracteres que representa el datepart especificado de la fecha especificada

Según sus definiciones, la única diferencia entre estas dos funciones es el tipo de retorno:

  • DATEPART() devuelve un número entero.
  • DATENAME() devuelve una cadena.

Así que esa es la diferencia.

En ambas definiciones, datepart es la parte de la fecha que desea (por ejemplo, mes), y fecha es la fecha desde la que desea que se devuelva la parte de fecha.

Nombres de mes y día

El ejemplo más obvio donde DATENAME() es más adecuado para DATEPART() es cuando desea que se devuelva el nombre del día o del mes.

He aquí un ejemplo.

NOMBRE DE FECHA()

Esto es lo que DATENAME() devuelve cuando queremos el día de la semana y el mes de una fecha:

SELECT
    DATENAME(weekday, '2000-01-01') AS 'DATENAME Weekday',
    DATENAME(month, '2000-01-01') AS 'DATENAME Month';

Resultado:

+--------------------+------------------+
| DATENAME Weekday   | DATENAME Month   |
|--------------------+------------------|
| Saturday           | January          |
+--------------------+------------------+

FECHAPARTE()

Esto es lo que DATEPART() devuelve:

SELECT
    DATEPART(weekday, '2000-01-01') AS 'DATEPART Weekday',
    DATEPART(month, '2000-01-01') AS 'DATEPART Month';

Resultado:

+--------------------+------------------+
| DATEPART Weekday   | DATEPART Month   |
|--------------------+------------------|
| 7                  | 1                |
+--------------------+------------------+

Cuando los resultados son iguales

En la mayoría de los casos, los resultados de ambas funciones parecerán ser los mismos. Esto se debe a que la mayoría de las partes de la fecha son numéricas por su propia naturaleza. Por ejemplo:

SELECT
    DATEPART(year, '2000-01-01') AS DATEPART,
    DATENAME(year, '2000-01-01') AS DATENAME;

Resultado:

+------------+------------+
| DATEPART   | DATENAME   |
|------------+------------|
| 2000       | 2000       |
+------------+------------+

Sin embargo, como se mencionó, uno devuelve un número entero y el otro una cadena.

Podemos ver evidencia de ello con el siguiente ejemplo:

SELECT
    DATEPART(year, '2000-01-01') + '1' AS DATEPART,
    DATENAME(year, '2000-01-01') + '1' AS DATENAME;

Resultado:

+------------+------------+
| DATEPART   | DATENAME   |
|------------+------------|
| 2001       | 20001      |
+------------+------------+

El signo más es un operador aritmético en tipos de datos numéricos, pero es un operador de concatenación de cadenas en cadenas.