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]

我们声明了一个 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]

我们要求 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]

我们要求 Datename 函数显示给定日期的年份名称,并在此基础上添加字符“a”。以下语句将执行字符串连接。
SELECT DATENAME(month, @Date) + 'a' AS [DateName]
由于 Datepart 函数的输出是整数,因此以下语句将引发如下所示的错误。
SELECT DATEPART(month, @Date) + 'a' AS [DatePart]
