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.