0

我有一个名为 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')

并比较结果。我找不到办法做到这一点。有诀窍吗?

4

2 回答 2

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

这假设您始终同时具有 to 和 from 值;如果没有,您将不得不使用外部联接。

于 2012-10-25T08:20:29.423 回答
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')

这将为您提供从 01/11/2012 到 20/11/2012 的所有日期以及在该期间结束的所有日期。我不知道那是不是你要求的。

于 2012-10-25T08:37:16.800 回答