你可以按照你的建议在日期进行数学运算。这里有一个简单的例子(可以替代你的DateTime.Now和适当的格式字符串,而不是我的硬编码为例):
SELECT TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM', 'DD-MON-YYYY HH12:MI:SS PM'))
+ 11/24 + 10/(24*60) AS MyDate FROM dual;
MYDATE
-------------------------
05-DEC-11 11:10:00 AM
注意我是如何走的输入日期,截断它(得到的日期没有时间),然后将小时和分钟添加到该基准日期。
您可以在此扩大使用BETWEEN
关键字,得到这样的:
SELECT * FROM my_table
WHERE CreateDate BETWEEN TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM',
'DD-MON-YYYY HH12:MI:SS PM')) + 11/24 + 10/(24*60) - 1
AND TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM',
'DD-MON-YYYY HH12:MI:SS PM')) + 11/24 + 10/(24*60);
或者,如果你总是传递DateTime.Now
你可以只使用日期从数据库中:
SELECT * FROM my_table
WHERE CreateDate BETWEEN TRUNC(sysdate) + 11/24 + 10/(24*60) - 1
AND TRUNC(sysdate) + 11/24 + 10/(24*60);
有没有办法避免'TRUNC'? – CoolArchTek
@CoolArchTek当然。只需省略日期的时间部分即可。或者甚至可以使用具有特定时间的DateTime对象(上午11:10)作为它的一部分。但是,如果你打算使用'DateTime.Now',你需要用你想要使用的特定时间替换(在调用时)捕获的时间。这可以通过'TRUNC()'或一个不捕获时间的格式字符串。 –