Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将日期传递给Oracle程序_C#_Oracle_Datetime - Fatal编程技术网

C#将日期传递给Oracle程序

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

我正在将一个日期(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_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);