Oracle,无法从同一列获取详细信息

时间:2012-10-25 08:16:07

标签: sql oracle entity-attribute-value

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

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

2 个答案:

答案 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日开始的所有日期 以及在该时期内结束的所有日期。 我不知道那就是你要求的。