OracleCommand似乎转换了文字日期
-
02-10-2019 - |
题
我使用OracleCommand和oracledataAdapter构建了一个用于Oracle的小查询工具。用户仅输入完整查询(无参数),执行和结果显示在DataGridView中。到目前为止,尽管我尝试了一个无效的查询,例如:
SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'
此查询对于Oracle不是有效的SQL。您必须使用to_date()函数与日期文字进行比较。 SQL开发人员也拒绝它,但是我的查询工具以某种方式可以起作用。这是否意味着我的OracleCommand在这里有点像向导,还是我做错了什么?还有一种方法可以忽略这种行为,因为该工具的目的是测试查询,应该始终工作...
谢谢
解决方案
查询可能对Oracle有效。您不必使用 to_date()
如果您在会话的日期格式中提供日期字符串,尽管通常最好这样做以避免这样的问题。
听起来您有不同的 NLS_DATE_FORMAT
在您的工具环境中,在SQL开发人员中或会话日期格式是由OracleCommand隐式设置的。
你可以 select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'
查看SQL*Plus和SQL开发人员以及工具的内容;并来自 nls_database_parameters
查看哪个是覆盖数据库默认值。
看起来您的工具可能有 DD-MON-RR
而且您期望在其他地方有其他一些格式,但是如果不检查这些表,很难说您在哪里使用数据库默认值以及在会话级别覆盖它的位置。我猜那是DB默认值,您在其他环境中会覆盖。
来自SQL开发人员,尝试 alter session set nls_date_format='DD-MON-RR';
然后重新运行您的无效查询 - 也应该在那里工作。