2010-11-04 147 views
1

我有一个问题我调整SQL语句的这一部分:SQL帮助... CONVERT(INT,CONVERT(日期时间,FLOOR(CONVERT(浮动,GETDATE())))

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

通常情况下,如果你想让你给自己的日期,那么使用这个语句的页面只是列出今天的销售量,我想将GETDATE()切换到我声明的日期,我尝试了所有不同的格式,并且没有任何工作

+4

你能解释一下你想要做什么吗?这看起来过于复杂。 – JNK 2010-11-04 17:23:40

+0

你还使用了哪些RDBMS(SQL Server,Oracle,MySQL等)? – JNK 2010-11-04 17:29:41

+0

是的,我有一个ASP页面,显示我今天的公司总销售额并建立一个表格。在数据库中,日期存储为39734,等于13Oct08。我需要一种方法将变量/参数转换为39734格式。 – MyHeadHurts 2010-11-04 17:30:13

回答

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显式转换该值。

+0

非常感谢! – MyHeadHurts 2010-11-04 17:40:25

+0

这个工程很好,当我输入日期我想显示在查询中,但你可以帮助宣布@var我真的很感激它。 – MyHeadHurts 2010-11-04 17:52:08

+0

@NEWprogrammer:我增加了一些细节 - [此链接提供了更多详细信息](http://www.databasejournal.com/features/mssql/article.php/3087431/T-SQL-Programming-Part-1-- -Defining-Variables-and-IFELSE-logic.htm) – 2010-11-04 17:56:09

1

你可以这样做,而不是getdate(),它给出了当前的系统时间戳。

Cast('2010-11-04 13:28:00.000' as datetime) 
1

如何

declare @myDate as datetime 
set @myDate = '11/2/2010' 

. . . 

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

应该这样做,而且应该做自动在设定的语句中使用的日期字符串类型转换,或者你可以只通过一个日期时间参数,如果这是在存储过程。

+0

看起来不错,但我的选择语句是在asp(而不是asp.net)页面和在selectdata =“选择......“我会在哪里放置声明@myDate作为日期时间 set @myDate = '11/2/2010' 它不起作用,当我把它放在我的查询的开始。 – MyHeadHurts 2010-11-04 17:35:45