这个SQL Query如何从Oracle SQL Developer中运行而不是从代码中运行?

leo*_*ora 1 c# sql oracle

当我从Oracle的SQL开发人员工具运行它时,我有以下SQL查询可以正常工作(返回多行):

select * from  [schema].[table] where resource_unique_name in ('abc123') and (slice_date >= '01-Nov-10') and (slice_date < '01-Dec-10')
Run Code Online (Sandbox Code Playgroud)

但不知何故,下面这段代码返回0条记录(没有错误,0条记录):

 OracleDataReader reader = new OracleDataReader();
 const string CONNECTION_STRING = [myConnetionString];

 connection.ConnectionString = CONNECTION_STRING;
 connection.Open();

 OracleCommand command = connection.CreateCommand();
 command.CommandText = [same SQL as above];

 OracleDataReader reader = command.ExecuteReader();

 int rowCount = 0;
 while (reader.Read())
 {
      rowCount++;
 }
 Console.Write(rowCount);
Run Code Online (Sandbox Code Playgroud)

连接打开很好,因为如果我硬编码不同的SQL查询,我会得到结果.

是否有任何理由查询在SQL查询工具中可以正常工作,但不是从我的C#代码?

更新说明: 在我的代码中,当我删除:

and (slice_date < '01-Dec-10')
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常(我得到数据).任何线索上述标准有什么问题?

Ron*_*nis 5

我将回答您更新中的最后一部分.

'01-Dec-10'是一个字符串.这不是约会.它与日期无关.直到它被转换为日期.(据我所知)有三种方法可以做到这一点.

  1. 使用TO_DATE()
  2. 指定日期文字date '2010-12-01',始终为iso日期YYYY-MM-DD
  3. 依靠使用NLS设置的隐式日期转换(您正在进行)

如果您的NLS设置为'DD-MON-RR',则字符串'01 -Dec-10'将转换为2010-12-01(2010年12月1日).另一方面,如果您的设置是'RR-MON-DD',它将被转换为'2001-12-10'(2001年12月10日).

我不知道你的设置,既然你也没有,你应该做正确的事情,那就是总是明确地使用TO_DATE()或日期文字.