日期之间的查询错误。神谕

时间:2018-02-05 14:43:36

标签: sql oracle date

我在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;

查询有效

The query works

查询不起作用

The query doesn't work

2 个答案:

答案 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的数据类型为DATETIMESTAMP,您只需比较日期值,例如:

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是默认的排序顺序,因此您可以根据需要跳过它。