C#将日期传递给Oracle过程

时间:2011-12-05 21:45:39

标签: c# oracle datetime

我将日期(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

3 个答案:

答案 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);