Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server DATEPART() vs DATENAME() – Qual é a diferença?


Ao trabalhar com datas no SQL Server, às vezes você pode encontrar o DATEPART() função, apenas para perceber que o que você realmente precisa é o DATENAME() função. Então pode haver outras situações em que DATEPART() é realmente preferível a DATENAME() .

Então, qual é a diferença entre o DATEPART()DATENAME() funções?

Vamos descobrir.


Definições


A diferença entre essas duas funções está em suas definições:
DATEPART()
Retorna um inteiro que representa a parte de data especificada da data especificada .
DATENAME()
Retorna uma sequência de caracteres que representa a parte de data especificada da data especificada

De acordo com suas definições, a única diferença entre essas duas funções é o tipo de retorno:
  • DATEPART() retorna um número inteiro.
  • DATENAME() retorna uma string.

Então essa é a diferença.

Em ambas as definições, datepart é a parte da data que você deseja (por exemplo, mês) e data é a data da qual você deseja que o datepart seja retornado.

Nomes de mês e dia


O exemplo mais óbvio onde DATENAME() é mais adequado para DATEPART() é quando você deseja que o nome do dia ou do mês seja retornado.

Aqui está um exemplo.

DATANOME()


Veja o que DATENAME() retorna quando queremos o dia da semana e o mês de uma data:
SELECT
    DATENAME(weekday, '2000-01-01') AS 'DATENAME Weekday',
    DATENAME(month, '2000-01-01') AS 'DATENAME Month';

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

DATEPART()


Veja o que DATEPART() retorna:
SELECT
    DATEPART(weekday, '2000-01-01') AS 'DATEPART Weekday',
    DATEPART(month, '2000-01-01') AS 'DATEPART Month';

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

Quando os resultados são iguais


Na maioria dos casos, os resultados de ambas as funções parecerão iguais. Isso ocorre porque a maioria das partes da data é numérica por natureza. Por exemplo:
SELECT
    DATEPART(year, '2000-01-01') AS DATEPART,
    DATENAME(year, '2000-01-01') AS DATENAME;

Resultado:
+------------+------------+
| DATEPART   | DATENAME   |
|------------+------------|
| 2000       | 2000       |
+------------+------------+

No entanto, como mencionado, um retorna um inteiro e o outro retorna uma string.

Podemos ver evidências disso com o seguinte exemplo:
SELECT
    DATEPART(year, '2000-01-01') + '1' AS DATEPART,
    DATENAME(year, '2000-01-01') + '1' AS DATENAME;

Resultado:
+------------+------------+
| DATEPART   | DATENAME   |
|------------+------------|
| 2001       | 20001      |
+------------+------------+

O sinal de mais é um operador aritmético em tipos de dados numéricos, mas é um operador de concatenação de strings em strings.