在 2 个日期之间选择值得到不正确的结果
Getting Incorrect results for selecting values between 2 dates
我正在尝试 运行 以下查询 select 2 个日期之间的一些结果,但由于条件不存在,我得到了结果。那么这里有什么问题?
select OPEN_TIME, STATUS
from PROBSUMMARY
where trunc (open_time) >= '01-01-2020'
and trunc (open_time) < '01-01-2021'
您正在比较日期和字符串; 日期被转换为字符串以进行比较。 From the documentation:
During SELECT FROM
operations, Oracle converts the data from the column to the type of the target variable.
当您的日期隐式转换为字符串时,根据 character value comparison rules.
,它们都在该字符串值范围内
以上当然不是真的;这将取代它:
When comparing a character value with a DATE
value, Oracle converts the character data to DATE
.
所以隐式转换中发生了一些奇怪的事情,这取决于您的 NLS_DATE_FOPRMAT
设置。无论如何,以下建议仍然有效...
将日期与日期进行比较,将字符串转换为 to_date()
或日期文字:
where open_time >= date '2020-01-01' and open_time < date '2021-01-01'
您不需要将日期截断回午夜;如果合适,这将有助于使用索引。
试试这个,
SELECT OPEN_TIME, STATUS
FROM PROBSUMMARY
WHERE OPEN_TIME < '01-01-2020' AND OPEN_TIME > '01-01-2021';
以上 where 条件 start_date 包括日期但 end_date 不包括,要包括这两个日期,您必须使用 =
。
确保您的通过日期必须遵循 mysql 的语法。
我正在尝试 运行 以下查询 select 2 个日期之间的一些结果,但由于条件不存在,我得到了结果。那么这里有什么问题?
select OPEN_TIME, STATUS
from PROBSUMMARY
where trunc (open_time) >= '01-01-2020'
and trunc (open_time) < '01-01-2021'
您正在比较日期和字符串; 日期被转换为字符串以进行比较。 From the documentation:
During
SELECT FROM
operations, Oracle converts the data from the column to the type of the target variable.
当您的日期隐式转换为字符串时,根据 character value comparison rules.
,它们都在该字符串值范围内以上当然不是真的;这将取代它:
When comparing a character value with a
DATE
value, Oracle converts the character data toDATE
.
所以隐式转换中发生了一些奇怪的事情,这取决于您的 NLS_DATE_FOPRMAT
设置。无论如何,以下建议仍然有效...
将日期与日期进行比较,将字符串转换为 to_date()
或日期文字:
where open_time >= date '2020-01-01' and open_time < date '2021-01-01'
您不需要将日期截断回午夜;如果合适,这将有助于使用索引。
试试这个,
SELECT OPEN_TIME, STATUS
FROM PROBSUMMARY
WHERE OPEN_TIME < '01-01-2020' AND OPEN_TIME > '01-01-2021';
以上 where 条件 start_date 包括日期但 end_date 不包括,要包括这两个日期,您必须使用 =
。
确保您的通过日期必须遵循 mysql 的语法。