如何在不使用 and 子句的情况下在 Sql 查询中使用 Between 子句

How to Use Between Clause in Sql query without using and clause

我创建了一个在 2 个日期之间获取结果的查询,它工作正常.. 现在我有一个用户不输入任何日期的场景..在这种情况下 无论日期如何,我都需要从数据库中获取所有结果。 当用户未输入任何日期时,以下查询失败,它 returns 空结果集。
请指导我如何解决这个问题。

select * from emp_register
where date between ' 2015-03-26 15:42:52' and ' 2015-03-26 15:42:52' 
or status= 'Y'

日期格式为 Timestamp

有两个选项:

  1. 使用动态 SQL 根据用户输入构建查询
  2. 使用多个 IF/ELSE 语句根据用户输入构建查询
  3. 设置始终适合您的时间范围的开始日期和结束日期的默认值,例如 1900-01-012300-01-01(如果用户未通过任何日期)。

where date between ' 2015-03-26 15:42:52' and ' 2015-03-26 15:42:52'

' 2015-03-26 15:42:52'NOT 一个 DATE,它是一个 string。永远不要依赖隐式数据类型转换。根据您的 NLS 设置,您可能只是幸运地获得结果,但是,当客户端 NLS 设置与其他人不同时,它肯定会失败。

Now i have a scenario in which users does not enter any date..In this case I need to fetch all the result from database regardless of date

不需要在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 and/or :date2 and/is NULL 时,它将使用默认日期值来获取table.

中的所有行