我想要的是,如果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
答案 0 :(得分:1)
我认为你的NLS设置
使用此功能获取第#天,而不更改设置:
1 + TRUNC (date) - TRUNC (date, 'IW'). --<>6 in your case
复制并粘贴此查询以查看它是否可以解决您的问题:
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
的效果是排除x
或y
为真的记录。您需要在您的情况下使用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;