日期格式化
传统的convert
SQL Server控制日期的的显示格式,通常使用CONVERT()函数,通过控制style参数来控制日期显示的格式,但是,style很多,不利于记忆。
--语法:
CONVERT(data_type(length),data_to_be_converted,style)
--例子:
CONVERT(VARCHAR(10),GETDATE(),110)
常用的style及其显示格式如下:
style | 格式 |
---|---|
23 | yyyy-mm-dd |
101 | mm/dd/yyyy |
110 | mm-dd-yyyy |
111 | yyyy/mm/dd |
112 | yyyymmdd |
120 | yyyy-mm-dd hh:mm:ss |
121 | yyyy-mm-dd hh:mm:sssssss |
便利的format函数(sqlserver2012版本以后)
FORMAT()函数主要用于格式化显示date/time类型和数值类型,参数format用于指定显示的格式,给予用户对格式更自由地控制,该函数返回值的数据类型是NVARCHAR,如果格式转换失败,该函数返回NULL
--语法
FORMAT(value,format)
--例子
select format(SYSDATETIME(),'yyyy-MM-dd hh:mm:ss fffffff')
select FORMAT(123456789,'###-##-####')
123-45-6789
参数format用#表示一个数值,用以下占位符来表示日期/时间的格式:
- yyyy、MM、dd:表示年、月、日
- hh:mm:ss fffffff:表示时、分、秒、毫秒
- 使用“/”,“-”等作为连接各个部分(part)的分割符号
日期计算
dateadd(日期部分,数字,日期)
select dateadd(mm,12,'1990-12-11')
1991-12-11 00:00:00.000
datediff(日期部分,开始日期,结束日期)
select datediff(yy,'1990-12-11','2008-9-10')
18
--返回表示指定日期的指定日期部分的字符串
--dw 表示一星期中星期几
--wk 表示一年中的第几个星期
--dy 表示一年中的第几天
--qq 季度
datename(日期部分,日期)
select datename(wk, '2007-12-11')
返回50 一年中的第几个星期
--同datename,只不过返回整数
--dw 默认 1 为星期天
datepart(日期部分,日期)
--返回指定日期的最后一天 sqlserver2012
eomonth(date [, month_to_add ] )
select EOMONTH(getdate()) as CurrentMonth_EndDay,
EOMONTH(getdate(),1) as NextMonth_EndDay,
EOMONTH(getdate(),-1) as LastMonth_EndDay
--日期生成
datafromparts(year,month,day)
select DATEFROMPARTS(year(getdate()),month(getdate()),1)
日期表达式
日期 | 表达式 |
---|---|
当前日期 | getdate() |
当前第几周 | datename(wk, getdate()) |
当前周几 | datename(dw, getdate()) |
下周一 | dateadd(wk,datediff(wk,0,getdate()),7) |
本周一 | dateadd(wk,datediff(wk,0,getdate()),0) |
月初 | DATEADD(mm, DATEDIFF(m,0,getdate()), 0) |
月末 | dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) |
年初 | DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) |
去年年初 | DATEADD(yy, DATEDIFF(yy,0,getdate())-1, 0) |
去年年末 | dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) |
季初 | DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) |
Comments NOTHING