如何在不使用 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
有两个选项:
- 使用动态 SQL 根据用户输入构建查询
- 使用多个 IF/ELSE 语句根据用户输入构建查询
- 设置始终适合您的时间范围的开始日期和结束日期的默认值,例如
1900-01-01
和 2300-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.
中的所有行
我创建了一个在 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
有两个选项:
- 使用动态 SQL 根据用户输入构建查询
- 使用多个 IF/ELSE 语句根据用户输入构建查询
- 设置始终适合您的时间范围的开始日期和结束日期的默认值,例如
1900-01-01
和2300-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.