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
   

 

-----------

 

posted @ 2019-08-22 14:19  深海地平线  阅读(1095)  评论(0编辑  收藏  举报