c#将日期传递给Oracle过程

本文关键字:Oracle 过程 日期 | 更新日期: 2023-09-27 18:16:56

我正在传递一个日期(DateTime.Now)从c#代码到Oracle过程。我想从表中检索

之间的所有值

DateTime。现在- 11:10:00 AM到DateTime。现在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

c#将日期传递给Oracle过程

你可以在你建议的日期做数学。这里有一个简单的例子(你可以替换你的DateTime)。现在和正确的格式字符串,而不是我的硬编码的例子):

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

Oracle默认的日期-和+操作符是使用天。

(in_CreateDate-1)和(in_CreateDate+1)之间的CreateDate应该可以工作

如果问题是您确实希望在当天创建内容,但时间戳会使您混乱,Oracle - operator默认只查看天数,因此您可以使用

in_CreateDate-CreateDate = 0

(请注意,我通常使用sql server,所以我不能测试这个;

管理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提供了一组指令来转换查询并在服务器上执行。