我使用SQL Server作为我的数据库。我正在搜索输入日期的行。这意味着搜索submission_date
正好'12/13/2011'
的行。首先,我将搜索条件日期转换为毫秒
即
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 Midnight
到Dec 14 Midnight
,但我想跳过上限值,即从Dec 13 2011 00:00:00
到Dec 13 2011 59:59:59
。为此,我想使用>= and <
。这是一种正确的方法吗?
完成此操作后,我有一个iBatis xml,我正在编写以下内容,这给了我错误。
<isNotEmpty prepend="AND" property="submissiondate">
submission_date <![CDATA[ >= ]]> #submissiondate # AND <![CDATA[ < ]]> #submissiondate #
</isNotEmpty>
请建议这是否正确。
由于
答案 0 :(得分:4)
是的,您通常会使用>=
和<
进行时间/日期范围查询
或者,您可以从上限减去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)
答案 1 :(得分:2)
在您的情况下,“日期”似乎是BIGINT
类型,为什么不从上限间隔中减去1?
SELECT * FROM log_file
WHERE submission_date BETWEEN 1323714600000 AND 1323801000000 - 1
当然,这不适用于浮点数或小数......
答案 2 :(得分:1)
是的,如果你必须跳过上限 - 你应该使用
WHERE Date >= '20111213' AND Date < '20111214'
当然 - 如果你的专栏类型是DATETIME