select * from table
where Date BETWEEN DATEADD(dd, DATEDIFF(dd, 84, GETDATE()),0)
and DATEADD(dd, DATEDIFF(dd, 77, GETDATE()),0)
有人可以解释这个查询在做什么吗?具体来说,此查询中DATEADD
和DATEDIFF
的功能是什么?
答案 0 :(得分:1)
您的表达式使用SQL Server语法将日期时间转换为日期(即删除日期组件。格式非常晦涩,因为表达式将getdate() - 84
作为整数进行,然后添加此到0
日期。由于datediff()
返回一个整数,因此消除了“时间”组件。
我认为这不适用于HQL。例如,dd
应为'dd'
,HQL有不同的获取当前日期的方法。
而且,在更新版本的SQL Server中,您只需执行cast(getdate() - 84 as date)
。
答案 1 :(得分:1)
他们试图在84到77天之间重新获得会员资格,从而剥夺了时间。
GETDATE()返回日期时间,但用户对时间不感兴趣。
DATEDIFF(dd,84,GETDATE())获取当前日期与1900年1月1日之后的第84天之间的天数。
DATEADD(dd,#from from above,0)将这些天数添加到1900年1月1日。
你可以在84天前的00:00:00收到网。
如果你刚刚做了DATEADD(dd,-84,GETDATE())那么你有84天前+当前时间。
执行相同操作的其他方法是将日期时间转换为日期(假设MS SQL Server)。
.. CAST((GETDATE() - 84) AS DATE)
.. CAST(DATEADD(day, -84, GETDATE()) as DATE)