我需要在 SQL 查询 WHERE 子句中包含一些“TIMESTAMP”字段:
SELECT * FROM PERSON WHERE PSN_CREATED_DATE >= :createdPrior
在我的代码中,创建之前参数定义如下
...
command.Parameters.Add(":createdPrior", Miscellaneous.convertToOracleTimeStamp(createdPrior));
...
static class Miscellaneous
{
public static OracleTimeStamp convertToOracleTimeStamp(DateTime dateTime)
{
OracleTimeStamp result = new OracleTimeStamp(dateTime);
return result;
}
}
结果我收到以下异常
异常:附加信息:ORA-00932:数据类型不一致:
预期时间戳为 NUMBER
你能告诉我,如何在 Oracle DB 的 SQL 查询中传递 DateTime 吗?
附:
我尝试过的:
-我创建了一个具有特征的 Oracle 参数
OracleParameter para = new OracleParameter();
para.ParameterName = ":createdPrior";
para.Direction = System.Data.ParameterDirection.Input;
para.OracleDbType = OracleDbType.TimeStamp;
para.Value = Miscellaneous.convertToOracleTimeStamp(createdPrior);
-我刚刚过了日期时间。我收到了另一个异常
-我尝试将参数转换为 DATE 类型(使用 to_date() 方法),但在这种情况下,我似乎失去了分钟和秒
做这个:
SELECT * FROM PERSON WHERE PSN_CREATED_DATE >= TO_TIMESTAMP(:createdPrior, 'yyyyMMddHH24missffff')
或者在C#中使用TimeStamp参数,应该是这样的
OracleParameter para = new OracleParameter(":createdPrior", OracleDbType.TimeStamp, ParameterDirection.Input);
para.Value = (Oracle.DataAccess.Types.OracleTimeStamp)value;
command.Parameters.Add(para);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)