我在Oracle / SQL中遇到问题
在查询中,我查找时间范围内的访问次数
当我在同一个月内设置日期范围时,一切都很完美,但是当我在不同月份设置日期范围时,它不起作用。
示例:
日期范围01/02/18至02/04/18,一切都很完美。
日期范围1/28/18至2/4/18,全球灾难。
会发生什么?
贝娄,我给你访问截图,这就是代码:
SELECT
TO_CHAR("fecha", 'DD/MM/YY') as fecha, count(TO_CHAR("fecha", 'DD/MM/YY')) as visitas
FROM VIS
WHERE "area" = 'home'
AND TO_CHAR("fecha", 'DDMMYY') >= '270118'
AND TO_CHAR("fecha", 'DDMMYY') <= '050218'
GROUP BY TO_CHAR("fecha", 'DD/MM/YY')
ORDER BY TO_CHAR("fecha", 'DD/MM/YY') ASC;
查询有效
查询不起作用
答案 0 :(得分:1)
您可以尝试如下..您需要将硬编码值转换为日期格式,而不是将日期列转换为char。
SELECT
fecha, count(fecha) as visitas
FROM VIS
WHERE "area" = 'home'
AND fecha between to_date('012718','MM/DD/YY') and to_date('020518','MM/DD/YY')
GROUP BY FECHA
ORDER BY FECHA ASC;
答案 1 :(得分:0)
XYZ >= '270118' AND XYZ <= '050218'
永远不会返回任何内容,因为2
大于0
,因此无法将这两个条件都设置为TRUE。
值不能大于2且同时小于0
假设fecha
的数据类型为DATE
或TIMESTAMP
,您只需比较日期值,例如:
WHERE "fecha" >= DATE '2018-01-27'
AND "fecha" <= DATE '2018-02-05'
或
WHERE "fecha" >= TO_DATE('270118', 'DDMMRR')
AND "fecha" <= TO_DATE('050218', 'DDMMRR')
RR
是年份的2位数格式,但是您应该总是更喜欢年份的4位数,即TO_DATE('27012018', 'DDMMYYYY')
如果您的"fecha"
数据还包含时间值(即时间值与00:00:00
不同),则应考虑使用WHERE TRUNC("fecha") >= ...
。
您还应该使用ORDER BY "fecha"
的DATE值,否则2001年12月31日将<201>张贴在 2018-02-05(即今天)之后 - 我不认为这是您的意图。 ASC
是默认的排序顺序,因此您可以根据需要跳过它。