本节知识点
常见日期场景的处理
1、系统当前日期
select getdate() as 当前系统日期
--建表时,设置日期字段默认值为系统当前日期
create table test5
(
fid int identity(1, 1),
fname varchar(50),
fdate datetime default(getdate())
)
insert into test5(fname)
select '测试一'
union all select '测试二'
select * from test5
2、日期函数
函数 | 参数/功能 |
GetDate( ) | 返回系统目前的日期与时间 |
DateDiff (interval,date1,date2) | 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 |
DateAdd (interval,number,date) | 以interval指定的方式,加上number之后的日期 |
DatePart (interval,date) | 返回日期date中,interval指定部分所对应的整数值 |
DateName (interval,date) | 返回日期date中,interval指定部分所对应的字符串名称 |
参数 interval的设定值:
值 | 缩写 | 中文 | 备注 |
Year | yy, yyyy | 年 | 年 1753 ~ 9999 |
Quarter | qq, q | 季度 | 季 1 ~ 4 |
Month | mm, m | 月 | 月1 ~ 12 |
Day of Year | dy, y | 年中的日 | 一年的日数,一年中的第几日 1-366 |
Day | dd, d | 日 | 日,1-31 |
Weekday | wk, ww | 周 | 一周的日数,一周中的第几日 1-7 |
Week | dw, w | 星期 | 周,一年中的第几周 0 ~ 51 |
Hour | hh | 小时 | 时0 ~ 23 |
Minute | mi, n | 分钟 | 分钟0 ~ 59 |
Second | ss, s | 秒 | 秒 0 ~ 59 |
Millisecond | ms | 毫秒 | 毫秒 0 ~ 999 |
Microsecond | mcs | 微秒 | 微秒 0 ~ 999 |
Nanosecond | ns | 纳秒 | 纳秒 0 ~ 999 |
3、datepart函数
select getdate() as 当前系统日期
--缩写1
select datepart(mm , getdate()) as 当前月份
--缩写2
select datepart(m , getdate()) as 当前月份
--全写
select datepart(month , getdate()) as 当前月份
4、datename函数
--返回星期的中文名称
select datename(weekday , getdate()) as 当前星期
5、dateadd/datediff日期加减函数
--当前日期加上2天
select dateadd(day , 2 , getdate()) as 日期
--日期最小值
select dateadd(mm , 0 , 0) as 日期最小值
--当前日期减去日期最小值,计算出所有的月份数
--第二个参数取0,即最小日期,最小日期是1900-01-01
select DATEDIFF(mm , 0 , getdate()) as 最小日期到本月的所有月份数
--当前月份的第一天
--第二个参数取最小日期到当前月份的总月份数,即就是当月
--第三个参数取0,即当前月份第一天,加0天,还是第一天
SELECT DATEADD(mm , DATEDIFF(mm , 0 , getdate()) , 0) as 本月第一天
--本周的星期一
SELECT DATEADD(wk , DATEDIFF(wk , 0 , getdate()) , 0) as 本周指定星期几
--本年的第一天
SELECT DATEADD(yy , DATEDIFF(yy , 0 , getdate()) , 0) as 本年第一天
--本季度的第一天
SELECT DATEADD(qq , DATEDIFF(qq , 0 , getdate()) , 0) as 本季度第一天
--当天的凌晨
SELECT DATEADD(dd , DATEDIFF(dd , 0 , getdate()) , 0) as 当天凌晨
--上月的最后一天
--它通过从一个月的最后一天这个例子上减去3毫秒来获得。
--有一点要记住,在Sql Server中时间是精确到3毫秒。
--这就是为什么我需要减去3毫秒来获得我要的日期和时间。
SELECT dateadd(ms , -3 , DATEADD(mm , DATEDIFF(mm , 0 , getdate()) , 0))
--上年的最后一天
SELECT dateadd(ms , -3 , DATEADD(yy , DATEDIFF(yy , 0 , getdate()) , 0)) as 上年最后一天
--本月的最后一天
SELECT dateadd(ms , -3 , DATEADD(mm , DATEDIFF(m , 0 , getdate())+1 , 0)) as 本月最后一天
--本年的最后一天
SELECT dateadd(ms , -3 , DATEADD(yy , DATEDIFF(yy , 0 , getdate())+1 , 0)) as 本年最后一天
--本月的第一个星期一
select DATEADD(wk , DATEDIFF(wk , 0 , dateadd(dd , 6-datepart(day , getdate()) , getdate())) , 0) as 本月第一个星期一
6、day()、month()、year()
--返回当前日期的日
select day(getdate()) as 当前日
--返回当前日期的月份
select month(getdate()) as 当前月份
--返回当前日期的年份
select year(getdate()) as 当前年份