2012-05-02 17 views
0

Oracleデータベースをベースとしたソフトウェアツールからデータを取得するためにSQLクエリを入力しています。私は典型的なSELECT -statementを使用しています。SQLクエリ(Oracle DBMS)で変数を使用していますか?

私のSQLクエリでは、別の場所で "02.05.2012"という日付を使用しています。最初に変数date_stringを定義し、この変数の関連するすべての場所で使用する方法はありますか?

これにより、多くのことが簡単になります。すべてのヒントとヒントをありがとう!

+0

どのSQLクライアントを使用していますか? SQL * Plus、SQL Developer? –

+0

私が使用するソフトウェアツール内の特定のボックスにSQLクエリを入力しています。このボックスはSQLクエリを取り込み、結果を出力します。だから、私は、残念なことに、下の提案されたソリューションのいずれかをサポートしていない組み込みのクライアントを使用していると思います。おそらく、それは非常に軽いSQLクライアントであり、要求された可変機能をサポートしていませんか?ソフトウェアツールのドキュメントでは、私には何のヒントも与えられていません。 – tyrex

答えて

4

あなたはからリテラルを返すようにクエリを書き換えしようとする可能性がありインラインビュー...

select 
    my_date, 
    ... 
from(
    select to_date('02.05.2012','DD.MM.YYYY') my_date from dual), 
    table2 
where 
    some_column <= my_date 
+0

GREAT。これは完全に機能します。ありがとうございました! – tyrex

1

現在の日付を使用して選択する場合は、sysdateを使用できます。

SQL> define mydate ="01-05-2012" 

SQL> select to_date('&mydate','DD-MM-YYYY') from dual; 

01-MAY-12 
0

は、次のことを試してください:

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' 

あなたがしたい場合は、& &日付の値を入力するためのプロンプトを取得する独自の変数を定義することができますSQLPLUSを使用して

日付ごとに異なる値を入力する場合は、& &の代わりに&の日付を入力してください。

+0

こんにちは、おかげで、提案!残念ながら、これは私のためには機能しません。理由は、私は典型的なSQLクライアントを持っていないが、私が使用するソフトウェアの組み込みツールを介してSQLクエリを処理している可能性があります。上記の "a_horse_with_no_name"への返答を参照してください。 – tyrex

0

DEFINEは、あなたの要件に役立ちます。あなたが探して何&NAME

+0

こんにちは、提案のおかげで!残念ながら、これは私のためには機能しません。理由は、私は典型的なSQLクライアントを持っていないが、私が使用するソフトウェアの組み込みツールを介してSQLクエリを処理している可能性があります。上記の "a_horse_with_no_name"への返答を参照してください。 – tyrex

2

DEFINE NAME="example" 

アクセスは、バインド変数です。

select to-date(:date, 'dd.mm.yyyy') date1 
,  to-date(:date, 'dd.mm.yyyy') + 1 date2 
from dual 

実行時に、値をバインド変数に渡す必要があります。変数はすべてあなたのプログラミング言語に依存しますが、そこにはたくさんのドキュメントがあります。 を使用すると、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 
+0

こんにちは、提案のおかげで!残念ながら、これは私のためには機能しません。理由は、私は典型的なSQLクライアントを持っていないが、私が使用するソフトウェアの組み込みツールを介してSQLクエリを処理している可能性があります。上記の "a_horse_with_no_name"への返答を参照してください。 – tyrex

+1

あなたの応答に反応して私の答えを編集しました – winkbrace

+0

+1、CTEを使って "変数"を定義するのは良い考えです –

関連する問題