我将日期(DateTime.Now)从C#代码传递给Oracle过程。我想从
之间的表中检索所有值DateTime.Now - 1 11:10:00 AM to DateTime.Now 11:09:59 AM
如何为此编写oracle条件?
注意:列'CreateDate'是日期
我现在有这个......
CreateDate >= TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') - 1
and CreateDate < TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') + 1
答案 0 :(得分:1)
Oracle中 - 和+运算符的默认日期是使用天数。
(in_CreateDate-1)和(in_CreateDate + 1)之间的CreateDate应该有效。
如果问题是你真的想要那天创建的东西,但是时间戳让你搞砸了,Oracle - 运营商只会默认查看天数,以便你可以使用
其中in_CreateDate-CreateDate = 0
(请注意我通常使用sql server,所以我无法测试这个;这是基于阅读Oracle文档)
答案 1 :(得分:1)
为了管理oracle datetime,我使用了OracleCommand和参数。 例如:
SELECT * FROM Table WHERE Date >= :date
使用OracleCommand,您可以这样做:
OracleCommand myOracleCommand = new OracleCommand("SELECT * FROM Table WHERE Date >= :date", myOracleConnection);
myOracleCommand.Parameters.Add(":date", OracleDbType.DateTime).Value = myDate;
...
我认为这是传递参数的最佳方式,因为Oracle提供了一组转换查询并在服务器上执行它的指令。
答案 2 :(得分:1)
你可以按照你的建议在日期做数学。这是一个快速示例(您可以替换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);