1.getdate()
getdate()是常用的获取日期的函数。在使用中要特别注意:由于系统或者电脑日期格式设置等问题,getdate()函数返回日期格式并不相同。为了统一日期格式可以使用convert函数对返回值进行格式转换。常用格式百度有很多,自己经常使用格式如下:
- select convert(varchar(100),getdate(),24)--15:51:28
- select convert(varchar(100),getdate(),23)--2017-02-25
- select convert(varchar(100),getdate(),120)--2017-02-25 15:50:32
2.datepart()和datename()区别和使方法
1.区别
datepart()和datename()区别是:前者返回指定日期部分的整数,而后者返回指定日期格式的字符串
2.使用方法
两者使用方法基本一样。语法分别是
DATENAME ( datepart , date ) 和
DATEPART (datepart , date ) 。datepart参数如下:
datepart | 缩写 |
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小时 | hh |
分钟 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
纳秒 | ns |
注意:对于更小的时间单位存在溢出值:
milliseconds 24 天
seconds 68 年
minutes 4083 年
others 没有溢出限制
milliseconds 24 天
seconds 68 年
minutes 4083 年
others 没有溢出限制
下面是使用datepart获取的日期部分,使用datename获取的值相同,只不过类型是字符串。(getdate()='2017-02-25')
select datepart(qq,getdate())--返回值是1 第一季度
select datepart(wk,'2017-02-26')-- 本年度第9周
select datepart(w,'2017-02-26')-- 1返回值1 这里明显是周日 但是返回值是1.因为系统默认周日是每周的第一天
如果想获取日期的年月日,除了这两个函数也可以直接使用year(),moutn(),day函数。
2.获取本季度的第一天和最后一天
获取季度最后一天
上边函数复制下面博客的。
- select day(getdate());--返回当前日期的天
- select month(getdate())--返回当前日期的月份
- select year(getdate());--返回当前日期的年份
3.日期加减DATEADD()和DATEDIFF()函数
- select DATEADD(wk,2,getdate());--为当前日期加上2周
- select DATEDIFF(d,'2017-02-25','2017-02-18');-- -7返回两个指定的时间之间(包括第二个日期但不包括第一个日期)的午夜数。
- select DATEDIFF(wk,'2017-02-06','2017-02-11');--0--返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。
- select DATEDIFF(wk,'2017-02-10','2017-02-12');--1
- select DATEDIFF(m,'2017-02-10','2017-02-17')--0--返回两个日期之间(包括第二个日期但不包括第一个日期)出现的月的第一天的数目。
- select DATEDIFF(m,'2017-02-10','2017-02-26')--0
4.综合
1.获取一年的第一天和最后一天
- select datename(yy,getdate())+'-01-01'--2017-01-01 使用datepart返回整数,不做类型转换会报错
- select datename(yy,getdate())+'-12-31'--2017-12-31 使用datepart返回整数,不做类型转换会报错
获取季度第一天
- select CONVERT(char(8),
- DATEADD(Month,
- DATEPART(Quarter,getdate())*3-Month(getdate())-2,
- getdate()),
- 120)+'01'--2017-01-01 系统里年月日格式统一为yyyy-mm-dd
- select convert(varchar(5),getdate(),23)+ (case when (datepart(q,getdate())*3-2)<10 then '0'+cast((datepart(q,getdate())*3-2)as char(1)) else cast((datepart(q,getdate())*3-2)as char(2)) end )+'-01'--返回值2017-01-01主要想得到mm-dd的日期格式 感觉有点繁琐的
获取季度最后一天
- SELECT CONVERT(datetime,
- CONVERT(char(8),
- DATEADD(Month,
- DATEPART(Quarter,getdate())*3-Month(getdate()),
- getdate()),
- 120)
- +CASE WHEN DATEPART(Quarter,getdate()) in(1,4)
- THEN'31'ELSE'30'END)