Sli*_*lim 1 sql oracle oracle10g
我有这个简单的查询:
select sm.id, h.time
from main_data sm
INNER JOIN TA t on t.id = sm.id AND t.first=1
LEFT OUTER JOIN History h on h.id= sm.id
WHERE trunc(TO_DATE(h.time, 'DD-MM-YYYY')) BETWEEN trunc(TO_DATE('07.05.2015', 'DD.MM.YYYY')) AND trunc(TO_DATE('07.06.2015', 'DD.MM.YYYY'));
Run Code Online (Sandbox Code Playgroud)
h.time 好像 07-MAY-15
即使指定参数之间存在日期,上述查询也不会返回任何结果.但是,如果我将where子句更改为
WHERE trunc(TO_DATE(h.time, 'DD-MM-YYYY')) BETWEEN trunc(TO_DATE('07.05.15', 'DD-MM-YYYY')) AND trunc(TO_DATE('07.06.15', 'DD-MM-YYYY'))
- 相同的日期,而不是2015只有15我可以看到查询的结果.
问题是我期待用户进入一整年 - 而不仅仅是15.我怎样才能避免这种不匹配?
首先,您的日期比较太复杂了.如果h.time是内部日期格式(它应该是),那么只需:
WHERE h.time BETWEEN DATE '2015-05-07' AND DATE '2015-06-07'
Run Code Online (Sandbox Code Playgroud)
您的查询的另一个非常重要的问题是该WHERE子句正在转变LEFT JOIN为INNER JOIN.更改连接类型以与逻辑一致或移动WHERE到ON子句(即使没有匹配日期,您也会得到结果).
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |