SQL 日期相关操作
一、获取月份的天数
-----获取月份的天数 SELECT 32-DAY(getdate()+32-DAY(getdate())) SELECT 32-DAY( CONVERT(datetime,'08/01/2019',101) +32-DAY(CONVERT(datetime,'08/01/2019',101) ))
二、日期加减
DATEADD(datepart,number,date)
datepart:y-年份,m-月份,d-日期
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
例:
select DATEADD(m,1,getdate()),DATEADD(m,1,CONVERT(datetime,'08/01/2019',101))
结果:
注意:能用DATEADD函数的就要用,不要用字符串转int再增加的方式,会出现意想不到的问题。而且出现的情况比较复杂,例如月份加1,当前月份为12月时,手动增加月份会出错,而用函数便不会。
三、日期比较 DATEDIFF
SELECT*FROM Log WHERE DATEDIFF(DAY,WriteTime,CONVERT(datetime,'2018-10-17',101))<0
四、SQL Server 时间字符串转换为DateTime格式
SELECT GETDATE() -------获取当前时间 SELECT CONVERT(DATETIME,'2018-06-26 09:54:30.027'); --------将时间字符串转换为DATETIME格式, SELECT CONVERT(DATETIME,'2018-06-26 09:54:30.027',20); --------同上 SELECT CONVERT(DATETIME,CONVERT(VARCHAR,DATEPART(yy,GETDATE())) +'-'+CONVERT(VARCHAR,DATEPART(mm,GETDATE()))+'-'+'1', 20) --获取本月开始时间,常用于以月份为单位的统计 SELECT CAST('2019-12-01' AS datetime)
五、提取日期中的年月日
语法:DATEPART(param,date)
其中,date为日期,
param是指定要返回日期部分的参数,取值如下表(参数值不区分大小写,风格上推荐大写)
示例:
SELECT DATEPART(YY,GETDATE()) '年',DATEPART(MM,GETDATE())'月',DATEPART(dd,GETDATE())'日' ---年份 SELECT DATEPART(YY,GETDATE()) '年1',DATEPART(YYYY,GETDATE()) '年2',DATEPART(year,GETDATE()) '年3' ---季度 SELECT DATEPART(QUARTER,GETDATE()) '季度1',DATEPART(qq,GETDATE()) '季度2',DATEPART(q,GETDATE()) '季度3' ---月份 SELECT DATEPART(MONTH,GETDATE()) '月份1',DATEPART(MM,GETDATE()) '月份2',DATEPART(M,GETDATE()) '月份3' ---日期 SELECT DATEPART(DAY,GETDATE()) '日期1',DATEPART(dd,GETDATE()) '日期2',DATEPART(d,GETDATE()) '日期3' ---年中天数 SELECT DATEPART(DAYOFYEAR,GETDATE()) '年中天数1',DATEPART(dy,GETDATE()) '年中天数2',DATEPART(Y,GETDATE()) '年中天数3' ---年中周数 SELECT DATEPART(WEEK,GETDATE()) '年中周数1',DATEPART(wk,GETDATE()) '年中周数2',DATEPART(ww,GETDATE()) '年中周数3' ---周几:1-7: 1为周日,2为周一 SELECT DATEPART(WEEKDAY,GETDATE()) '周几1',DATEPART(DW,GETDATE()) '周几2' ---小时 SELECT DATEPART(HOUR,GETDATE()) '小时',DATEPART(HH,GETDATE()) '小时' ---分钟 SELECT DATEPART(MINUTE,GETDATE()) '分钟1',DATEPART(MI,GETDATE()) '分钟2',DATEPART(N,GETDATE()) '分钟3' ---秒钟 SELECT DATEPART(SECOND,GETDATE()) '秒1',DATEPART(SS,GETDATE()) '秒2',DATEPART(S,GETDATE()) '秒3' ---毫秒 SELECT DATEPART(MILLISECOND,GETDATE()) '毫秒1',DATEPART(MS,GETDATE()) '毫秒2'
六、判断两个时间段是否有交集
给定时间区间(begin,end),数据库字段startTime与endTime,现在要判断它们之间是否有交集。
SELECT * FROM xxx WHERE NOT ((endTime < begin) OR (startTime > end))
*SQL Server 日期格式化输出
最常用格式
SELECT CONVERT(VARCHAR(100), GETDATE(), 111) 结果:2010/03/06
SELECT CONVERT(VARCHAR(100), GETDATE(), 23) 结果:2010-03-06
T-SQL Script | Output format |
SELECT CONVERT(VARCHAR(100), GETDATE(), 0) | 03 6 2010 4:19PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 1) | 03/06/10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 2) | 10.03.06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 3) | 06/03/10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 4) | 06.03.10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 5) | 06-03-10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 6) | 06 03 10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 7) | 03 06, 10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 8) | 16:23:28 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 9) | 03 6 2010 4:23:40:110PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 10) | 03-06-10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 11) | 10/03/06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 12) | 100306 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 13) | 06 03 2010 16:24:39:763 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 14) | 16:24:50:823 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 20) | 2010-03-06 16:25:04 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 21) | 2010-03-06 16:25:18.107 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 22) | 03/06/10 4:25:27 PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 23) | 2010-03-06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 24) | 16:26:48 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 25) | 2010-03-06 16:26:55.810 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 100) | 03 6 2010 4:27PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 101) | 03/06/2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 102) | 2010.03.06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 103) | 06/03/2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 104) | 06.03.2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 105) | 06-03-2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 106) | 06 03 2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 107) | 03 06, 2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 108) | 16:28:25 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 109) | 03 6 2010 4:28:35:123PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 110) | 03-06-2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 111) | 2010/03/06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 112) | 20100306 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 113) | 06 03 2010 16:29:25:217 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 114) | 16:29:32:543 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 120) | 2010-03-06 16:29:44 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 121) | 2010-03-06 16:29:51.030 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 126) | 2010-03-06T16:29:59.327 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 130) | 21 ???? ????? 1431 4:30:06:780PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 131) | 21/03/1431 4:30:21:990PM |
-----------
斩后知