我有以下数据
1 1990-01-01 2000-08-31 A
2 2000-09-01 2001-05-31 B
3 2001-06-01 2018-12-31 C
并且需要编写SQL查询来查找具有代码的行 date range = fromdate 1992-01-01 and ToDate 2000-12-31。
Select *
From Table
Where fromDate <= 1992-01-01
and EndDate >=2000-12-31
没有返回正确的数据。
任何帮助??
预期输出是前两行,涵盖查询中提到的部分日期。
可能的查询之一是:
选择*来自fromdate&lt; = 19920101的表格 联盟 选择*来自表格,其中todate&gt; = 20011231
但有些我不喜欢它,想要更方便的选择。
答案 0 :(得分:0)
切换运算符
select *
from Table
where fromDate >= '1992-01-01'
and EndDate <= '2000-12-31'
答案 1 :(得分:0)
您应该将数据迁移到日期对象:
Select *
from table
where fromDate >= to_date('1992-01-01','YYYY-MM-DD')
and ...
在此处查看有效的日期格式和语法: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm
答案 2 :(得分:0)
尝试反向过滤,我的意思是更改过滤日期:
WITH tab(ID, start_date, end_date, code) AS (
SELECT 1, to_date('1990-01-01', 'YYYY-MM-DD'), to_date('2000-08-31', 'YYYY-MM-DD'), 'A' FROM dual UNION ALL
SELECT 2, to_date('2000-09-01', 'YYYY-MM-DD'), to_date('2001-05-31', 'YYYY-MM-DD'), 'B' FROM dual UNION ALL
SELECT 3, to_date('2001-06-01', 'YYYY-MM-DD'), to_date('2018-12-31', 'YYYY-MM-DD'), 'C' FROM dual)
-----------------
--End of data preparation
-----------------
SELECT *
FROM tab
WHERE end_date >= to_date('1992-01-01', 'YYYY-MM-DD')
AND start_date <= to_date('2000-12-31', 'YYYY-MM-DD');
输出
| ID | START_DATE | END_DATE | CODE |
|----|----------------------------------|-------------------------------|------|
| 1 | January, 01 1990 00:00:00+0000 | August, 31 2000 00:00:00+0000 | A |
| 2 | September, 01 2000 00:00:00+0000 | May, 31 2001 00:00:00+0000 | B |
答案 3 :(得分:0)
根据你的说法,你必须提出一个OR。这真的是你需要的吗?
Select *
From Table
Where fromDate <= '1992-01-01'
OR EndDate >='2000-12-31'