Oracle查询日期显示参数返回的日期栏没有记录

问题描述:

我有下面的代码 -Oracle查询日期显示参数返回的日期栏没有记录

CMD = new OracleCommand("SELECT * FROM BOOKINGSV3 WHERE DT = :DateInQuestion ", Con); 
CMD.Parameters.Add("DateInQuestion", OracleDbType.Date).Value = DateTime.Today; 

DT是日期列,我知道甲骨文商店明确日期,如果我尝试手动与'14 -AUG- 17 00:00:00'我可以检索所需的结果。我怎样才能使用一个日期使用参数以外的参数进行搜索,而不是使用字符串参数并以'14 -AUG-17 00:00:00'格式构造一个字符串?

enter image description here

enter image description here

+0

如果你一直在寻找今天,那么你可以搜索'trunc(sysdate)'而不是绑定一个值;但大概这个价值会改变?应用程序和数据库是否在相同的语言环境中? (也许值得检查存储的日期是在正确的世纪;如果你的NLS_DATE_FORMAT使用YY而不是RR,但不认为这是这里的问题...) –

+0

是的,值会改变,今天只是一个例子。我的开发机器使用美式键盘布局,区域设置是英国(与服务器相同)。 2月2日,我尝试了美国和英国的格式参数,但仍未找到任何结果 - 日期时间(2017,8,2)和日期时间(2017,2,8) –

+0

好吧,那么如果是关于C#(或任何此代码是)我不会发现它。但是,我仍然总是怀疑这种事情的2位数年份,所以如果只是关闭我,你能否检查'dt'值实际上是2017年?他们都准备午夜了? –

一种方式做,这是创建一个包含你要搜索和改变你的查询明确创建使用您在字符串中使用的日期格式的日期日期的字符串。

CMD = new OracleCommand("SELECT * FROM BOOKINGSV3 WHERE DT = to_date(':DateInQuestion','DD-MM-YYYY HH24:MI:SS') ", Con); 

这样你控制日期格式而不是一些NLS设置。

+0

如果它被绑定为一个日期('OracleDbType.Date'),那么为什么NLS设置仍然重要? (另外...使用'MON'仍然依赖于NLS;如果你保留了这个值,那么使用YYYY会使得0017不是2017 * 8-) –

如果您DT值具有非午夜时间,然后获得在某一天的所有值,你可以使用范围:

SELECT * FROM BOOKINGSV3 WHERE DT >= :DateInQuestion AND DT < :DateInQuestion + 1 

>=意味着它会发现从午夜开始的时间; < .. + 1将限制在第二天午夜之前。