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
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 月 11 日から 2012 年 11 月 20 日までのすべての日付と、その期間に終了するすべての日付が得られます。それがあなたの求めているものかどうかはわかりません。

于 2012-10-25T08:37:16.800 に答える
1

テーブルを 2 回クエリし、両方のサブクエリの結果を比較する必要があります。次に例を示します。

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 に答える