💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
此页面列出了最常用的SQL Server日期函数,它们能够有效地处理日期和时间日期。 **返回日期和时间函数** | 编号 | 函数 | 描述说明 | | --- | --- | --- | | 1 | DATENAME | 以字符串形式返回日期部分 | | 2 | DATEPART | 以整数形式返回日期部分 | | 3 | DAY| 以整数形式返回指定日期 | | 4 | MONTH | 以整数形式返回指定日期的月份 | | 5 | YEAR | 以整数形式返回日期的年份。 | **返回两个日期之间的差值** | 编号 | 函数 | 描述说明 | | --- | --- | --- | | 1 | DATEDIFF | 返回两个日期之间的日期部分的差值。 | | 2 | DATEDIFF\_BIG | 返回两个日期之间的日期部分的差值。 | **修改时间函数** | 编号 | 函数 | 描述说明 | | --- | --- | --- | | 1 | DATEADD | 将值添加到日期部分并返回新的日期值。 | | 2 | EOMONTH | 返回包含指定日期的月份的最后一天,并带有可选的偏移量。 | | 3 | SWITCHOFFSET | 更改`DATETIMEOFFSET`值的时区偏移量并保留UTC值。 | | 4 | TODATETIMEOFFSET | 将`datetime2`值转换为`datetimeoffset`值。 | #### SQL Server DATENAME()函数概述 `DATENAME()`函数返回一个字符串`NVARCHAR`类型,表示指定日期部分,例如指定日期的年,月和日。 以下是`DATENAME()`函数的语法: ~~~sql DATENAME(date_part,input_date) ~~~ `DATENAME()`函数接受两个参数: * `date_part`是要返回的日期的一部分。下表列出了所有有效的日期部分值。 * `input_date`是一个文字日期或表达式,可以解析为:TIME,DATE,`SMALLDATETIME`,`DATETIME`,DATETIME2或`DATETIMEOFFSET`值。 | date\_part | 缩写形式 | | --- | --- | | year | yy, yyyy | | quarter | qq, q | | month | mm, m | | dayofyear | dy, y | | day | dd, d | | week | wk, ww | | weekday | dw | | hour | hh | | minute | mi, n | | second | ss, s | | millisecond | ms | | microsecond | mcs | | nanosecond | ns | | TZoffset | tz | | ISO\_WEEK | isowk, isoww | #### DATENAME()与DATEPART()区别 请注意,除返回类型外,`DATENAME()`类似于DATEPART()。 `DATENAME()`函数将日期部分作为字符串返回,而`DATEPART()`将日期部分作为整数返回。 请参阅以下示例: ~~~sql SELECT DATEPART(year, '2020-11-10') [datepart], DATENAME(year, '2020-11-10') [datename]; ~~~ 执行上面查询语句,得到以下结果: ~~~shell datepart datename ----------- ------------------------------ 2020 2020 (1 行受影响) ~~~ 但是,它们的数据类型不同,如以下示例所示: ~~~sql SELECT DATEPART(year, '2021-07-10') + '1' [datepart], DATENAME(year, '2021-07-10') + '1' [datename] ; ~~~ 执行上面查询语句,得到以下结果: ~~~shell datepart datename ----------- ------------------------------- 2022 20211 (1 行受影响) ~~~ 因为`DATEPART()`函数返回一个整数,所以表达式的计算结果为`2022`(即:`2021 + 1`)。 但是,`DATENAME()`函数返回一个字符串,因此,`+`是连接运算符,它得到结果为:`'20211'`(即:`'2021' + '1')`。 #### SQL Server DATENAME()函数示例 此示例使用`DATENAME()`函数返回`'2022-11-12 11:22:33.1234567 +08:10'`的各种日期部分: ~~~sql DECLARE @dt DATETIME2= '2022-11-12 11:22:33.1234567 +08:10'; SELECT 'year,yyy,yy' date_part, DATENAME(year, @dt) result UNION SELECT 'quarter, qq, q', DATENAME(quarter, @dt) UNION SELECT 'month, mm, m', DATENAME(month, @dt) UNION SELECT 'dayofyear, dy, y', DATENAME(dayofyear, @dt) UNION SELECT 'day, dd, d', DATENAME(day, @dt) UNION SELECT 'week, wk, ww', DATENAME(week, @dt) UNION SELECT 'weekday, dw, w', DATENAME(week, @dt) UNION SELECT 'hour, hh' date_part, DATENAME(hour, @dt) UNION SELECT 'minute, mi,n', DATENAME(minute, @dt) UNION SELECT 'second, ss, s', DATENAME(second, @dt) UNION SELECT 'millisecond, ms', DATENAME(millisecond, @dt) UNION SELECT 'microsecond, mcs', DATENAME(microsecond, @dt) UNION SELECT 'nanosecond, ns', DATENAME(nanosecond, @dt) UNION SELECT 'TZoffset, tz', DATENAME(tz, @dt) UNION SELECT 'ISO_WEEK, ISOWK, ISOWW', DATENAME(ISO_WEEK, @dt); ~~~ 执行上面查询语句,得到以下结果: ~~~shell date_part result ---------------------- ------------------------------ day, dd, d 12 dayofyear, dy, y 316 hour, hh 11 ISO_WEEK, ISOWK, ISOWW 45 microsecond, mcs 123456 millisecond, ms 123 minute, mi,n 22 month, mm, m 11 nanosecond, ns 123456700 quarter, qq, q 4 second, ss, s 33 TZoffset, tz +00:00 week, wk, ww 46 weekday, dw, w 46 year,yyy,yy 2022 (15 行受影响) ~~~