C#将日期传递给Oracle程序
我正在将一个日期(DateTime.Now)从C#代码传递到Oracle过程。我想从表中检索 DateTime.Now-上午11:10:00到DateTime.Now上午11:09:59 如何为此编写oracle条件 注意:“CreateDate”列是一个日期 我现在就有这个C#将日期传递给Oracle程序,c#,oracle,datetime,C#,Oracle,Datetime,我正在将一个日期(DateTime.Now)从C#代码传递到Oracle过程。我想从表中检索 DateTime.Now-上午11:10:00到DateTime.Now上午11:09:59 如何为此编写oracle条件 注意:“CreateDate”列是一个日期 我现在就有这个 CreateDate >= TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') - 1 and CreateDate < TO_DATE(to_char(in_Cre
CreateDate >= TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') - 1
and CreateDate < TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') + 1
CreateDate>=TO_DATE(TO_char(in_CreateDate),'DD-MON-YY')-1
和CreateDate
在Oracle中,日期的-and+运算符的默认值是使用天
CreateDate介于(在_CreateDate-1中)和(在_CreateDate+1中)之间应该可以工作
如果问题是你真的想在那天创建东西,但时间戳把你搞砸了,Oracle-operator只会查看默认的天数,这样你就可以使用它了
其中_CreateDate-CreateDate=0
(请注意,我通常使用sql server,因此无法对此进行测试;这是基于阅读Oracle文档)为了管理Oracle日期时间,我使用了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提供了一组指令来转换查询并在服务器上执行它。您可以按照建议在日期进行计算。下面是一个快速示例(您可以用DateTime.Now和正确的格式字符串代替我的硬编码示例): 请注意,我是如何获取输入日期的,将其截断(以获取没有时间的日期),然后将小时和分钟添加到基准日期的 您可以在此基础上展开,使用
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。现在
您可以使用数据库中的日期:
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-Sure。只需省略日期的时间部分。或者甚至使用一个DateTime对象,它已经包含了您想要的特定时间,上午11:10。但是如果你打算使用
DateTime.Now
你需要用你想要使用的特定时间替换其中捕获的时间(无论何时调用)。这可以通过TRUNC()
实现,也可以通过不捕获时间的格式字符串实现。
SELECT * FROM my_table
WHERE CreateDate BETWEEN TRUNC(sysdate) + 11/24 + 10/(24*60) - 1
AND TRUNC(sysdate) + 11/24 + 10/(24*60);