2017-12-14 9 views
0

'WHERE'節に日付情報を入力するときに二重入力を排除する変数を宣言したいと思います。ただし、データベースは読み取り専用であり、何も宣言することはできません。これは私が試したことです:'読み取り専用' MySQLデータベースで変数を宣言する

SET @begin_date = '2017-12-01' 
SET @end_date = '2017-12-30' 
WHERE (ship.dateShipped BETWEEN @begin_date AND @end_date) 
OR (fulfill.datefulfilled BETWEEN @begin_date AND @end_date) 

質問はこのポストのために簡略化されていますが、基本的に何をしようとしています。これを営業担当者に渡して、必要に応じて実行し、日付パラメータをできるだけ簡単に変更したいと考えています。

このシナリオで変数を宣言する方法はありますか?あるいは、 'WHERE'節を書く代わりに日付を入力するだけでよいのですか?

私も試してみました:

SELECT @begin_date := '2017-12-01', @end_date := '2017-12-30'...... 

とも

DECLARE begin_date INT unsigned DEFAULT '2017-12-01' 
DECLARE end_date INT unsigned DEFAULT '2017-12-30' 

を無駄に。

+1

変数のインライン展開はどうですか? (つまり、 'BETWEEN' 2017-12-01 'AND' 2017-12-30'') –

+0

はい、うまくいきます。しかし、私は変数でこれをしたいので、レポートの範囲を変更するときは、2つの日付を調整する必要があります(その後、次の変数インスタンスを更新します)。これを使用するセールスマンにとって可能な限り簡単に日付範囲を更新しようとしています。 –

答えて

0

あなたのクエリはほとんど変わりませんが、このようなものはうまくいくはずです。

SELECT ... 
FROM .... 
INNER JOIN (SELECT '2017-12-01' AS beginDate, '2017-12-30' AS endDate) AS dr 
ON (ship.dateShipped BETWEEN dr.beginDate AND dr.endDate) 
OR (fulfill.datefulfilled BETWEEN dr.beginDate AND dr.endDate) 
... 

本当に@変数を使用できませんか?

+0

私はFishbowl Inventoryデータベースからレポートを取得するためのクエリを作成していますが、@変数を使用しているときにクエリは実行されません。この参加はトリックでした。 –

関連する問題