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()
e 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.