我创建了一个查询,可以获得两个日期之间的结果,它的工作正常。
现在我有一个用户不输入任何日期的场景。在这种情况下
无论日期如何,我都需要从数据库中获取所有结果。
当用户未输入任何日期时,以下查询失败,并返回
空结果集。
请指导我如何解决这个问题。
select * from emp_register
where date between ' 2015-03-26 15:42:52' and ' 2015-03-26 15:42:52'
or status= 'Y'
日期格式为Timestamp
答案 0 :(得分:2)
“2015-03-26 15:42:52”和“2015-03-26 15:42:52”之间的日期
' 2015-03-26 15:42:52'
不 DATE ,它是字符串。永远不要依赖隐式数据类型转换。您可能很幸运能够根据 NLS 设置获得结果,但是,当客户端NLS设置与其他设置不同时,它肯定会失败。
现在我有一个用户没有输入任何日期的情况。在这种情况下,无论日期如何,我都需要从数据库中获取所有结果
无需在 PL / SQL 中执行,在 SQL 中执行此操作。
对值使用 NVL 功能。在NVL的 BETWEEN 子句中使用默认的下限和上限日期值。
例如,
SELECT *
FROM emp_register
WHERE DATE BETWEEN NVL(:date1, DATE '1900-01-01') AND NVL(:date2, DATE '9999-01-01')
OR status= 'Y'
因此,只要:date1
和/或:date2
和/ NULL ,它就会使用默认日期值来从表中获取所有行。
答案 1 :(得分:1)
有几种选择:
1900-01-01
和2300-01-01
,如果用户没有通过任何内容。