日期:2014-05-16  浏览次数:20908 次

求一个时间范围查询的语句
时间字段是 saletime  date类型 数据2013-11-15 14:20:39 等等
如果我查询条件里的两个变量 start和end 填入完整的如上时间 可以查询出正确的结果
但是要求日期某一天的时间范围查询 写如下的语句 就查询不出任何数据了
select * from saled where substr(to_char(saletime),1,10) = '2013-11-15' and 
saletime between to_date('2013-11-15 12:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2013-11-15 17:00:00','yyyy-mm-dd hh24:mi:ss');

------解决方案--------------------
引用:
Quote: 引用:

substr(to_char(saletime),1,10) = '2013-11-15' 
这个不指定格式,可以吗?
这样还用不上索引呀

刚发现 已更正了 可以正确查出数据了
但是写到PB数据窗口里查询时 却报错 ‘无效的数字类型’ 此段代码如下
:as_day :as_start :as_end是参数
 substr(to_char(saletime,'yyyy-mm-dd'),1,10) = :as_day ) AND  
         (saled.saletime between to_date(:as_day+' '+:as_start,'yyyy-mm-dd hh24-mi-ss') and to_date(:as_day+' '+:as_end,'yyyy-mm-dd hh24-mi-ss')))

字符串拼接 ::as_day+' '+:as_start 应该为::as_day
------解决方案--------------------
' '
------解决方案--------------------
:as_start
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

substr(to_char(saletime),1,10) = '2013-11-15' 
这个不指定格式,可以吗?
这样还用不上索引呀

刚发现 已更正了 可以正确查出数据了
但是写到PB数据窗口里查询时 却报错 ‘无效的数字类型’ 此段代码如下
:as_day :as_start :as_end是参数
 substr(to_char(saletime,'yyyy-mm-dd'),1,10) = :as_day ) AND  
         (saled.saletime between to_date(:as_day+' '+:as_start,'yyyy-mm-dd hh24-mi-ss') and to_date(:as_day+' '+:as_end,'yyyy-mm-dd hh24-mi-ss')))

字符串拼接 ::as_day+' '+:as_start 应该为::as_day
------解决方案--------------------
' '
------解决方案--------------------
:as_start

刚想起oracle里不能这么拼接字符串 和PB脚本搞混了 还有HH24:MI:SS也修改过了 不报错了
数据窗口查询不出数据 执行SQL语句的话 倒是能查询出数据……

如果是这种情况,你就需要检查你参数的值的问题了。