sql中的代码不符合AND条件

时间:2017-09-03 20:46:11

标签: sql oracle

我想要的是,如果date_prestamo中的日期是6而return date中的日期是6,则不显示该记录。但是评论条件中的过滤器没有这样做。

--no funciona LA CONDICION COMENTADA
SELECT e.ID_LECTOR,e.NOMBRE, p.FECHA_PRESTAMO, p.FECHA_DEVOLUCION
FROM ESTUDIANTE e
JOIN PRESTAMO p
ON e.ID_LECTOR = p.ID_LECTOR
GROUP BY e.ID_LECTOR,e.NOMBRE, p.FECHA_PRESTAMO, p.FECHA_DEVOLUCION
--HAVING ((EXTRACT(DAY FROM  p.FECHA_PRESTAMO) <> 06)
--AND (EXTRACT(DAY FROM  p.FECHA_DEVOLUCION) <> 06))
ORDER BY ID_LECTOR;

没有HAVING ((EXTRACT ......它选择:

19044429-9  Erato   16/06/17    21/06/17
19044429-9  Erato   18/09/17    24/09/17
19044429-9  Erato   11/04/17    15/04/17
19044429-9  Erato   03/10/17    06/10/17

HAVING((EXTRACT .....选择:

19044429-9  Erato   18/09/17    24/09/17
19044429-9  Erato   11/04/17    15/04/17
19044429-9  Erato   16/06/17    21/06/17

3 个答案:

答案 0 :(得分:1)

我认为你的NLS设置

使用此功能获取第#天,而不更改设置:

1 + TRUNC (date) - TRUNC (date, 'IW'). --<>6 in your case

Similar SO

Oracle community

复制并粘贴此查询以查看它是否可以解决您的问题:

SELECT e.ID_LECTOR,e.NOMBRE, p.FECHA_PRESTAMO, p.FECHA_DEVOLUCION
FROM ESTUDIANTE e
JOIN PRESTAMO p
ON e.ID_LECTOR = p.ID_LECTOR
GROUP BY e.ID_LECTOR,e.NOMBRE, p.FECHA_PRESTAMO, p.FECHA_DEVOLUCION
HAVING ( 1 + TRUNC (p.FECHA_PRESTAMO) - TRUNC (p.FECHA_PRESTAMO, 'IW') ) <> 06)
AND  ( 1 + TRUNC (p.FECHA_DEVOLUCION) - TRUNC (p.FECHA_DEVOLUCION, 'IW') ) <> 06)
ORDER BY ID_LECTOR;

答案 1 :(得分:1)

  

&#34;我想要的是,如果在&#34; date_prestamo&#34;是6和#34;返回日期&#34;是6然后不显示该记录&#34;

这是布尔逻辑中的一个问题。条件NOT x AND NOT y的效果是排除xy为真的记录。您需要在您的情况下使用OR

您应该使用WHERE子句来过滤而不是HAVING。

select e.id_lector,e.nombre, p.fecha_prestamo, p.fecha_devolucion
from estudiante e
join prestamo p
on e.id_lector = p.id_lector
where ((extract(day from  p.fecha_prestamo) <> 06)
or (extract(day from  p.fecha_devolucion) <> 06))
order by e.id_lector, p.fecha_prestamo;

这很有效,我已经编写了一个Oracle LiveSQL演示来证明它。 Check it out

答案 2 :(得分:0)

这可以通过在WHERE子句中使用条件

来实现
SELECT e.ID_LECTOR,
       e.NOMBRE, 
       p.FECHA_PRESTAMO, 
       p.FECHA_DEVOLUCION
  FROM ESTUDIANTE e
  JOIN PRESTAMO p
    ON e.ID_LECTOR = p.ID_LECTOR
 WHERE EXTRACT(DAY FROM  p.FECHA_PRESTAMO) <> 06
   AND EXTRACT(DAY FROM  p.FECHA_DEVOLUCION) <> 06)
 ORDER BY e.ID_LECTOR;