我有一个名为PARAMETER的表,如下所示:
ID - number
NAME - varchar2
VALUE - varchar2
我有这个查询女巫是从字符串中“提取”日期:
SELECT * from PARAMETER
where (NAME = 'From') and SUBSTR(VALUE, 1, 2)>='01'
and SUBSTR(ALUE, -7, 5)>='11' and SUBSTR(VALUE, -4, 4) >='2012'
现在我需要再次更改它:where (NAME = 'From')
到where (NAME = 'To')
并比较结果。我找不到办法做到这一点。有诀窍吗?
答案 0 :(得分:1)
您必须两次查询表并比较两个子查询的结果,例如:
with v_from as (
SELECT * from PARAMETER
where (NAME = 'From') and SUBSTR(VALUE, 1, 2)>='01'
and SUBSTR(VALUE, -7, 5)>='11' and SUBSTR(VALUE, -4, 4) >='2012'),
v_to as (
SELECT * from PARAMETER
where (NAME = 'From') and SUBSTR(VALUE, 1, 2)>='01'
and SUBSTR(VALUE, -7, 5)>='11' and SUBSTR(VALUE, -4, 4) >='2012')
select f.id, f.name, f.value as from_value, t.value as to_value
from v_from f
join v_to t on f.id = t.id
这假设你总是同时拥有和来自值;如果没有,你将不得不使用外连接。
答案 1 :(得分:1)
Select * From Parameter
Where Name='From'
AND TO_DATE(VALUE, 'DD/MM/YYYY') >= TO_DATE('01/11/2012', 'DD/MM/YYYY')
AND TO_DATE(VALUE, 'DD/MM/YYYY') <= TO_DATE('20/11/2012', 'DD/MM/YYYY')
UNION
Select * From Parameter
Where Name='To'
AND TO_DATE(VALUE, 'DD/MM/YYYY') >= TO_DATE('01/11/2012', 'DD/MM/YYYY')
AND TO_DATE(VALUE, 'DD/MM/YYYY') <= TO_DATE('20/11/2012', 'DD/MM/YYYY')
这将为您提供从2012年11月1日至2012年11月20日开始的所有日期 以及在该时期内结束的所有日期。 我不知道那就是你要求的。