我在调整SQL语句的这一部分时遇到问题:
HAVING dbo.BOOKINGS.BOOKED = CONVERT(int, CONVERT(datetime,
FLOOR(CONVERT(float, GETDATE()))) + 2)
通常,使用此语句的页面只列出今天的销售量,我想将GETDATE()
切换到我声明的日期。我尝试了所有不同的格式,但都没有工作
答案 0 :(得分:2)
使用DATEADD / DATEDIFF方法将时间部分设置为当前日期的午夜 - 这是最快的方式,并且转换为FLOAT可能不可靠:
HAVING BOOKINGS.dbo.BOOKED = CONVERT(INT, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0))+2
然后,如果使用变量(在此示例中为@var,在存储过程或函数中),则可以轻松设置自己的日期:
DECLARE @var DATETIME
SELECT ...
HAVING BOOKINGS.dbo.BOOKED = CONVERT(INT, DATEADD(dd, DATEDIFF(dd, 0, @var), 0))+2
这假设@var是DATETIME数据类型。否则,您将需要使用日期格式SQL Server将隐式转换为DATETIME - 或使用CAST/CONVERT显式转换该值。
答案 1 :(得分:1)
如果你想要你自己的日期,你可以这样做,而不是getdate(),它给出了当前的系统时间戳。
Cast('2010-11-04 13:28:00.000' as datetime)
答案 2 :(得分:1)
怎么样
declare @myDate as datetime
set @myDate = '11/2/2010'
. . .
HAVING dbo.BOOKINGS.BOOKED = CONVERT(int, CONVERT(datetime,
FLOOR(CONVERT(float, @myDate ))) + 2)
应该这样做,并且它应该自动对set语句中使用的日期字符串进行类型转换,或者如果存储过程中存在日期时间参数,则可以传入它。