SQL HELP ... CONVERT(int,CONVERT(datetime,FLOOR(CONVERT(float,getdate())))

时间:2010-11-04 17:20:36

标签: sql sql-server sql-server-2005 tsql

我在调整SQL语句的这一部分时遇到问题:

HAVING dbo.BOOKINGS.BOOKED = CONVERT(int, CONVERT(datetime, 
                                                  FLOOR(CONVERT(float, GETDATE()))) + 2)

通常,使用此语句的页面只列出今天的销售量,我想将GETDATE()切换到我声明的日期。我尝试了所有不同的格式,但都没有工作

3 个答案:

答案 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语句中使用的日期字符串进行类型转换,或者如果存储过程中存在日期时间参数,则可以传入它。