【问题标题】:Add date parameter to oracle query在 oracle 查询中添加日期参数
【发布时间】:2013-03-09 02:21:32
【问题描述】:

我要做的是在两个日期之间执行查询,日期将来自一个参数。

在下面的代码中,我放置了一个参数并让第二个日期固定为示例目的。

代码/查询有点长,粘贴在这里,但这里是一个简短的版本:

OracleParameter fromDateParameter = new OracleParameter();
fromDateParameter.OracleDbType = OracleDbType.Varchar2;
fromDateParameter.Value = "'3/06/2013 20:00:00'";

this.oracleDataAdapter4.SelectCommand = new OracleCommand("
   SELECT DISTINCT (LOG.RID) FROM LOG WHERE LOG.TIMESTAMP 
   BETWEEN TO_DATE(:fromDateParameter, 'MM/DD/YYYY hh24:mi:ss ') 
   AND TO_DATE('3/06/2013 23:59:00', 'MM/DD/YYYY hh24:mi:ss '))", 
   oracleConnection4);

oracleDataAdapter4.SelectCommand.Parameters.Add(fromDateParameter);           
this.oracleDataAdapter4.Fill(event11);

我收到了这条消息:

ORA-01858:在数字所在的位置发现了一个非数字字符 预计

我在没有参数的情况下做了同样的查询,它工作得很好。

谢谢

【问题讨论】:

  • WHERE = LOG.TIMESTAMP BETWEEN ... 可以吗?不应该是 WHERE LOG.TIMESTAMP BETWEEN ...
  • 好的,让我们从等式中去掉参数 SELECT DISTINCT (LOG.RID) FROM LOG WHERE = LOG.TIMESTAMP BETWEEN TO_DATE('3/06/2013 23:59:00', 'MM/ DD/YYYY hh24:mi:ss ') AND TO_DATE('3/06/2013 23:59:00', 'MM/DD/YYYY hh24:mi:ss ') 有效吗?
  • 如果我将 :fromDateParameter 替换为 '3/06/2013 20:00:00' 效果很好。
  • 好的...你能告诉我 :fromDateParameter 的确切值是多少吗?可能与这种格式不匹配 MM/DD/YYYY hh24:mi:ss
  • 好吧,TO_DATE 正在转换为该特定格式,它不必“匹配”。你可以在我上面的代码中看到:fromDateParameter 的值。 fromDateParameter.Value = "'3/06/2013 20:00:00'";

标签: c# sql visual-studio-2010 oracle oracle11g


【解决方案1】:

我没有找到使用 Varchar2 数据类型的方法。所以,我使用日期数据类型给出答案。

if (dateTo.Minute > 30)
   minToInt = 30;
else
   minToInt = 00;

dateFrom = DateTime.Now;
dateTo = DateTime.Now;     

DateTime dateFrom = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, dateFrom.Hour, 00, 00);
DateTime dateTo = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, dateTo.Hour, minToInt, 00);

////////FROM DATE/////////
OracleParameter fromDateParameter = new OracleParameter();
fromDateParameter.OracleDbType = OracleDbType.Date;
fromDateParameter.Value = dateFrom;

////////TO DATE/////////
OracleParameter toDateParameter = new OracleParameter();
toDateParameter.OracleDbType = OracleDbType.Date;
toDateParameter.Value = dateTo;


this.oracleDataAdapter4.SelectCommand = new OracleCommand("
   SELECT DISTINCT (LOG.RID) FROM LOG WHERE LOG.TIMESTAMP 
   BETWEEN :fromDateParameter 
   AND :toDateParameter)", oracleConnection4);

oracleDataAdapter4.SelectCommand.Parameters.Add(fromDateParameter);           
oracleDataAdapter4.SelectCommand.Parameters.Add(toDateParameter);  
this.oracleDataAdapter4.Fill(event11);

不要混淆 if/else 分钟验证,它只是为了我的查询目的。

【讨论】:

  • 先生,您的第二个参数不应该是“...AND :toDateParameter)”,?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2011-12-18
  • 2020-11-04
  • 2021-11-14
  • 2020-10-12
相关资源
最近更新 更多