MSSQL日期格式解析之SQL篇

1. SQL中日期格式化函数

SQL中有多种日期格式化函数,其中最常用的是CONVERT和FORMAT函数。 CONVERT函数可以将日期/时间数据类型转化为字符数据类型,而FORMAT函数则可以将字符数据类型按照指定格式输出。

1.1 CONVERT函数

CONVERT函数可以将日期/时间数据类型转化为字符数据类型,其语法如下:

CONVERT(data_type(length),expression,style)

其中,data_type为要将expression转换为的数据类型,length为数据类型的长度。expression为要转换的日期/时间表达式,style为表示日期/时间的格式代码。style的取值范围很广,在SQL Server中共有21种style可供选择。下面列出其中比较常用的几种style:

mm/dd/yyyy:转换为月/日/年格式的字符数据类型,例如:03/01/2022。

dd/mm/yyyy:转换为日/月/年格式的字符数据类型,例如:01/03/2022。

yyyy-mm-dd:转换为年-月-日格式的字符数据类型,例如:2022-03-01。

mon dd yyyy hh:mi:ss:mmm:转换为短日期/时间格式的字符数据类型,例如:Mar 1 2022 12:00:00:000AM。

下面是一个例子,将日期格式转化为yyyy-mm-dd的字符型:

SELECT CONVERT(VARCHAR(10), GETDATE(), 120)

输出结果为:2022-03-01。其中,GETDATE()函数用于获取当前日期/时间。

1.2 FORMAT函数

FORMAT函数可以将字符数据类型按照指定格式输出,其语法如下:

FORMAT ( value, format [, culture ] )

其中,value为要格式化的值,format为表示输出格式的字符串,culture为要使用的地区/语言,可选项。一般情况下,culture使用默认值。

下面是几个例子:

SELECT FORMAT(GETDATE(),'yyyy-MM-dd')

SELECT FORMAT(GETDATE(),'dd-MM-yyyy')

SELECT FORMAT(GETDATE(),'HH:mm:ss')

SELECT FORMAT(GETDATE(),'h:mm:ss tt')

输出结果分别为:

2022-03-01

01-03-2022

22:44:48

10:44:48 PM

2. SQL中日期格式化示例

下面列举几个日期格式化的示例:

2.1 将日期类型转换为yyyy/mm/dd格式的字符数据类型

下面的代码将查询结果中hire_date列中的日期类型转换为yyyy/mm/dd格式的字符数据类型:

SELECT CONVERT(VARCHAR(10),hire_date,111) AS hire_date FROM employees

2.2 将日期类型转换为mon dd yyyy hh:mi:ss:mmm格式的字符型数据类型

下面的代码将查询结果中hire_date列中的日期类型转换为Mon dd yyyy hh:mi:ss:mmm格式的字符数据类型:

SELECT CONVERT(VARCHAR(30),hire_date,109) AS hire_date FROM employees

2.3 使用FORMAT函数将日期格式化为yyyy/mm/dd格式

下面的代码将查询结果中hire_date列中的日期类型格式化为yyyy/mm/dd:

SELECT FORMAT(hire_date,'yyyy/MM/dd') AS hire_date FROM employees

2.4 将字符数据类型转换为日期类型

下面的代码将查询结果中的字符数据类型birthdate列转换为日期类型:

SELECT CONVERT(DATE,birthdate) AS birthdate FROM employees

3. 其他常用日期格式化函数

除了CONVERT和FORMAT函数外,SQL Server还有其他常用的日期格式化函数,例如 YEAR、DATEPART、DATEADD、DATEDIFF 等。

3.1 YEAR函数

YEAR函数用于获取日期/时间表达式的年份,其语法如下:

YEAR(date)

其中,date为要获取年份的日期/时间表达式。下面是一个例子:

SELECT YEAR(GETDATE()) AS Year

输出结果为当前年份,例如:2022。

3.2 DATEPART函数

DATEPART函数用于获取日期/时间表达式中的指定部分,例如年、月、日、小时等,其语法如下:

DATEPART (datepart, date)[(arg)]

其中,datepart为要获取的日期/时间部分,例如:yy为年,mm为月,dd为日等;date为要获取日期/时间部分的表达式;arg为与datepart关联的整数表达式,例如获取第几周,则arg为2。

下面是一些例子:

SELECT DATEPART(yy, GETDATE()) AS Year

SELECT DATEPART(mm, GETDATE()) AS Month

SELECT DATEPART(day, GETDATE()) AS Day

SELECT DATEPART(weekday, GETDATE()) AS Weekday (1表示周日,2表示周一,以此类推)

3.3 DATEADD函数

DATEADD函数用于在日期/时间表达式中添加一个指定的时间间隔。其语法如下:

DATEADD (datepart, number, date)

其中,datepart为要添加的时间间隔,例如:yy为年,mm为月,dd为日等;number为要添加的数量,可以是正数也可以是负数;date为要添加时间间隔的日期/时间表达式。

下面是一些例子:

SELECT DATEADD(year, 1, GETDATE()) AS AddYear

SELECT DATEADD(month, 6, GETDATE()) AS AddMonth

SELECT DATEADD(day, -3, GETDATE()) AS SubDay

3.4 DATEDIFF函数

DATEDIFF函数用于计算两个日期/时间之间的间隔。其语法如下:

DATEDIFF (datepart, startdate, enddate)

其中,datepart为要计算的时间间隔,例如:yy为年,mm为月,dd为日等;startdate为间隔的起始日期/时间表达式,enddate为间隔的结束日期/时间表达式。

下面是一些例子:

SELECT DATEDIFF(year, '1998-01-01', '2022-03-01') AS DiffYear

SELECT DATEDIFF(month, '2022-03-01', '2022-04-01') AS DiffMonth

SELECT DATEDIFF(day, '2022-03-01', '2022-03-03') AS DiffDay

4. 总结

日期格式化在SQL中十分重要,可以让我们更方便地使用和理解日期相关的数据。本文介绍了SQL中常用的日期格式化函数CONVERT和FORMAT,以及其他常用的日期格式化函数YEAR、DATEPART、DATEADD、DATEDIFF等。希望这篇文章对你有所帮助。