2011-12-29 57 views
0

我正在使用SQL Server作为我的数据库。我正在搜索我输入日期的一行。这意味着搜索行submission_date正好是'12/13/2011'。首先,我将搜索条件日期毫秒如何排除BETWEEN sql server的上限

Dec 13 2011 00:00:00 ='1323727200000' 
Dec 14 2011 00:00:00 ='1323813600000'` 

SELECT * 
FROM log_file 
WHERE submission_date BETWEEN '1323727200000' AND '1323813600000' 

这个查询将搜索Dec 13 MidnightDec 14 Midnight,但我想上限值,即跳过从Dec 13 2011 00:00:00Dec 13 2011 59:59:59。为此我想用>= and <。这是一个正确的方法吗?

这样做后,我有一个iBatis xml在哪里写下面这是给我错误。

<isNotEmpty prepend="AND" property="submissiondate"> 
    submission_date <![CDATA[ >= ]]> #submissiondate # AND <![CDATA[ < ]]> #submissiondate # 
</isNotEmpty> 

请提出建议,如果这是正确的做法。

感谢

回答

3

是的,你会使用>=<通常用于时间/日期范围查询

或者,你可以从上限值减去3毫秒来获得当天的最高日期时间(不更新DATETIME2)值(xxx 23:59.59.997

SELECT * FROM log_file 
WHERE submission_date BETWEEN 1323714600000 AND 1323801000000-3 

注:减去1很可能会确定,如果一切毫秒...

编辑,例如为什么3ms的

SELECT 
    DATEADD(millisecond, -1, '20111214'), -- 2011-12-14 00:00:00.000 
    DATEADD(millisecond, -2, '20111214'), -- 2011-12-13 23:59:59.997 
    DATEADD(millisecond, -3, '20111214') -- 2011-12-13 23:59:59.997 

有趣的是,你确定这是午夜?
对于1323813600秒,我得到2011-12-13 22:00:00

在SQL Server上:

SELECT DATEADD(second, 1323813600, '19700101') 

在MySQL

SELECT FROM_UNIXTIME(1323813600) 
+0

为什么'3ms',不'1ms'?这是SQL Server中一些微妙的日期时间小故障的解决方法吗? – 2011-12-29 11:40:10

+1

@Lukas Eder:日期时间测量值为3.33秒,间隔为3.33秒。这可能是不需要在这里第二想法... – gbn 2011-12-29 11:41:35

+0

虽然很高兴知道! – 2011-12-29 11:42:34

1

在你的情况,其中“日期”似乎是BIGINT型的,为什么不从上部区间上限减去1?

SELECT * FROM log_file 
WHERE submission_date BETWEEN 1323714600000 AND 1323801000000 - 1 

当然,这不会与浮点数或小数工作...

1

是的,如果你要跳过上限 - 你应该使用

WHERE Date >= '20111213' AND Date < '20111214' 

中当然 - 如果你的专栏的类型是DATETIME