SqlServer日期

发布于 2021-03-17  295 次阅读


日期格式化

传统的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)