Oracleデータベースに基づくソフトウェアツールからデータを取得するためにSQLクエリを入力しています。私は典型的なSELECT
ステートメントを使用しています。
現在、SQLクエリでは、日付「02.05.2012」をさまざまな場所で使用しています。最初に変数を定義date_string
してから、関連するすべての場所でこの変数を使用する方法はありますか?
これは物事を非常に単純化するでしょう。すべてのヒントをありがとう!
インライン ビューからリテラルを返すようにクエリを書き直そうとするかもしれません...
select
my_date,
...
from(
select to_date('02.05.2012','DD.MM.YYYY') my_date from dual),
table2
where
some_column <= my_date
探しているのはバインド変数です。
select to-date(:date, 'dd.mm.yyyy') date1
, to-date(:date, 'dd.mm.yyyy') + 1 date2
from dual
実行時に、値をバインド変数に渡す必要があります。変数をバインドする方法はすべてプログラミング言語に依存しますが、それに関するドキュメントはたくさんあります。DEFINE は、sql*plus を使用する場合にのみ機能します。通常、「ソフトウェア ツール」内ではそうではありません :)
編集:
私は今、理解し始めています。これは、クエリを入力できる単なるテキストエリアであり、それを実行して結果を返します。その場合、複雑な pl/sql コードを記述するか、すべての日付を手動で入力するか、デュアルから選択してクロス結合を使用します。
with (select to_date('02.05.2012', 'dd.mm.yyyy') my_date from dual) d
select *
from some_table t
cross join d -- no ON required
現在の日付を使用して選択する場合は、sysdate を使用できます。
SQLPLUS を使用すると、独自の変数を定義できます。
SQL> define mydate ="01-05-2012"
SQL> select to_date('&mydate','DD-MM-YYYY') from dual;
01-MAY-12
以下を試してください:
SELECT *
FROM table1
WHERE to_char(date1,'DD/MM/YYYY') = '&&date'
AND to_char(date2,'DD/MM/YYYY') = '&&date'
AND to_char(date3,'DD/MM/YYYY') = '&&date'
&&date の値を入力するプロンプトが表示されます。日付ごとに異なる値を入力する場合は、 &&date の代わりに &date と入力してください。