使用SQL Server时注意与MySQL的方言差异
Datediff函数
DATEDIFF函数计算两个DATE,DATETIME或TIMESTAMP值之间的天数。
MySQL方言
语法如下:
DATEDIFF(date_expression_1,date_expression_2)
得出来的结果是 date_expression_1 - date_expression_2的天数差
注意:
- 是前面天数减去后面天数:
- DATEDIFF函数接受两个任何有效日期或日期时间值的参数。如果您传递DATETIME或TIMESTAMP值,则DATEDIFF函数仅将日期部分用于计算,并忽略时间部分。
SQL Server方言
语法:datediff(datepart,startdate,enddate)
1、datepart,规定应在日期的哪一部分计算差额
日期 缩写
year yy/yyyy
quarter qq/q
Month mm/m
day dd/d
Hour hh/h
minute mi,n
second ss,s
注意:是后面日期减去前面的日期(enddate-startdate)
1.参数是 yyyy的话,统计相差的年份,截取前4位进行统计
select datediff(yyyy,‘20210928’,‘20200121’)test
–select datediff(year,‘20210928’,‘20200121’)test
–select datediff(yy,‘20210928’,‘20200121’)test
2、参数是 qq时,统计相差的季度
select datediff(qq,‘20210928’,‘20200121’)test
–select datediff(q,‘20210928’,‘20200121’)test
–select datediff(quarter,‘20210928’,‘20200121’)test
3、参数是 mm的时候,统计相差的月份,截取前6位进行统计
select datediff(mm,‘20210928’,‘20200121’)test
–select datediff(m,‘20210928’,‘20200121’)test
–select datediff(month,‘20210928’,‘20200121’)test
4、参数是 dd的时候,统计相差的天数
select datediff(dd,‘20210928’,‘20200121’)test
–select datediff(day,‘20210928’,‘20200121’)test
–select datediff(d,‘20210928’,‘20200121’)test
5、参数是 hh的时候,统计相差的小时
select datediff(hour,‘20211112 10:00:00’,‘20211112 00:00:00’)test_hour
,datediff(hh,‘20211112 10:00:00’,‘20211112 00:00:00’)test_hh
6、参数是 mi的时候,统计相差的分钟数
select datediff(minute,‘20211112 10:00:00’,‘20211112 00:00:00’)test_minute
,datediff(mi,‘20211112 10:00:00’,‘20211112 00:00:00’)test_mi
,datediff(n,‘20211112 10:00:00’,‘20211112 00:00:00’)test_n
7、参数是 ss的时候,统计相差的秒数
select datediff(second,‘20211112 10:00:00’,‘20211112 00:00:00’)test_second
,datediff(ss,‘20211112 10:00:00’,‘20211112 00:00:00’)test_ss
,datediff(s,‘20211112 10:00:00’,‘20211112 00:00:00’)test_s
亲测,第一个参数写day也可以取到两个日期之间的天数差值。但是当一个是date格式,一个是timestamp格式的时候,也不需要将cast(timestamp格式的字段 as date)强制转换。