SQL 中 DATEPART 和 DATENAME 的区别

SQL 中 DATEPART 和 DATENAME 之间的区别是最常见的面试问题之一。虽然 SQL Server 的 DATEPART 和 DATENAME 的语法相同,但它们的返回值不同。

它们之间最根本的区别是 SQL DATEPART 函数返回整数值,而 DATENAME 函数返回字符串数据。

SQL 中 DATEPART 和 DATENAME 的区别

在本例中,我们将声明一个 datetime2 数据类型的变量,并为该变量分配一个有效日期。使用该变量,让我们使用 DATEPART 和 DATENAME 提取月份和星期几。

DECLARE @Date datetime2 = '2015-09-01 12:24:04.1234567'

SELECT DATENAME(month, @Date) AS [DateName] 
SELECT DATEPART(month, @Date) AS [DatePart] 

SELECT DATENAME(weekday, @Date) AS [DateName] 
SELECT DATEPART(weekday, @Date) AS [DatePart]
Difference between DATEPART and DATENAME in SQL 1

我们声明了一个 SQL 变量,并将日期和时间分配给该变量。

DECLARE @Date datetime2 = '2015-09-01 12:24:04.1234567'

我们要求 DATENAME 函数显示给定日期的月份名称和星期名称。它返回的月份名称是九月,星期二是星期二。

SELECT DATENAME(month, @Date) AS [DateName]

SELECT DATENAME(weekday, @Date) AS [DateName]

我们要求 DATEPART 函数显示给定日期的月份编号和星期编号。它将返回月份编号 9,星期编号 3(0=星期日)。

SELECT DATEPART(month, @Date) AS [DatePart] 

SELECT DATEPART(weekday, @Date) AS [DatePart]

SQL 中 DATEPART 和 DATENAME 的区别 2

在本例中,我们将声明一个 datetime2 数据类型的变量,并为该变量分配一个有效日期。使用该变量,让我们使用 DATEPART 和 DATENAME 提取月份,并执行算术加法。

DECLARE @Date datetime2 = '2015-09-01 12:24:04.1234567'

SELECT DATENAME(month, @Date) + '1' AS [DateName] 
SELECT DATEPART(month, @Date) + '1' AS [DatePart]
Difference between DATEPART and DATENAME in SQL 2

我们要求 SQL Datename 函数显示给定日期的月份名称,并在此基础上加 1。由于 Datename 函数的输出是字符串,因此以下语句将进行字符串连接。

SELECT DATENAME(month, @Date) + '1' AS [DateName]

由于 Datepart 函数的输出是整数,因此以下 SQL Datepart 语句将执行算术运算,将(9 + 1 = 10)相加。

SELECT DATEPART(month, @Date) AS [DatePart]

SQL 中 DATEPART 和 DATENAME 的区别 3

让我们使用 DATEPART 和 DATENAME 提取年份,并将一个字符串附加到输出中。

DECLARE @Date datetime2 = '2015-09-01 12:24:04.1234567'

SELECT DATENAME(year, @Date) + 'a' AS [DateName] 
SELECT DATEPART(year, @Date) + 'a' AS [DatePart]
Difference between DATEPART and DATENAME in SQL 3

我们要求 Datename 函数显示给定日期的年份名称,并在此基础上添加字符“a”。以下语句将执行字符串连接。

SELECT DATENAME(month, @Date) + 'a' AS [DateName]

由于 Datepart 函数的输出是整数,因此以下语句将引发如下所示的错误。

SELECT DATEPART(month, @Date) + 'a' AS [DatePart] 
Msg 245, Conversion Failed Message 4