在sql查询中,日期的比较不能检索到实际数据。

问题描述 投票:0回答:1

我试图过滤掉'31-01-2020'之前的数据和'01-01-2020'之后的数据,但是下面的查询不成功。我是否遗漏了一些比较日期的东西?

select * 
from per_all_assignments_m paam
where 1 = 1
  and TO_CHAR(paam.effective_start_date, 'DD-MM-YYYY') <= '31-01-2020' 
  and TO_CHAR(paam.effective_END_date, 'DD-MM-YYYY') >= '01-01-2020'
  and assignment_number like '%555%'
  and assignment_type = 'E'
sql oracle-sqldeveloper plsqldeveloper
1个回答
0
投票

不要把日期变成字符串来比较。首先,你所使用的格式使得比较是错误的。即使你使用的是正确的日期格式,这仍然是非常低效的。

相反,将它们与字面日期进行比较。

where 
    effective_start_date >= date '2020-01-01'
    and effective_start_date < date '2020-02-01'

0
投票

你可以试试

select * from per_all_assignments_m paam
where 1=1
and (paam.effective_start_date <= to_date('31-01-2020', 'dd-mm-rrrr') OR paam.effective_END_date >= to_date('01-01-2020', 'dd-mm-rrrr'))
and assignment_number like '%555%'
and assignment_type = 'E'
© www.soinside.com 2019 - 2024. All rights reserved.