2011-07-19 1 views
0

は、[OK]をので、ここでの例のクエリです:SQLを使用する列の値は

SELECT DISTINCT id, amount FROM tbl_recurring_payment AS t 
WHERE ADDDATE(t.start_date, INTERVAL (t.period) UPPER(t.unit)) = CURDATE()); 

問題の領域があり、私はexprがMySQLのキーワードとして扱われることをことをしたいUPPER(t.unit) (この列の可能な値は、日、週、月、年です)。 exprをキーワードとして使用することができないので、エラーが発生します。これを動作させるために何かできることはありますか?それとも、ユニットのチェックを追加し、ユニットの可能な値ごとにキーワードをハードコードするだけですか?一見

+0

データベースはMySQLの – chris

+0

であるあなたが投稿した後、あなたの質問を編集することができます知っている必要があります! – ascanio

+0

コメントはより速かった – chris

答えて

1

は、私は本当にただ

NO

+0

です。 –

+0

@ Ypercube、動的SQLの場所と時間がありますが、これはそうではありません。 – Johan

0

、私の考えは、私がCASE声明でこれに近づくだろうということです。

SELECT -- Is the DISTINCT really necessary??? 
    id, 
    amount 
FROM 
    tbl_recurring_payment AS T 
WHERE 
    CASE t.unit 
     WHEN 'YEAR' THEN ADDDATE(t.start_date, INTERVAL t.period YEAR) 
     ... 
    END = CURDATE() 

あなたはINTERVAL構文を使用してコードビット(読みやすくするためではなく、パフォーマンス)を合理化することができるかもしれませんはありませんが、それが可能かどうかを知るのに十分なだけのMySQLは使用していません。 (...t.start_date + CASE t.unit WHEN 'YEAR' THEN INTERVAL t.period YEAR...)?その可能なクエリ文字列にキーワードとして列の値を使用する場合

+0

よく質問を書く方法の質問ではなく、質問は本当にそれがタイトルで言うものです、スクリプトはいくつかのコンテキストを与えることでした。私は実際には、クエリ文字列のキーワードとして列値を使用できるかどうかを知る必要があります – chris

+1

動的SQLを使用せずに認識しているものはありません。もちろん、動的SQLには独自の欠点があります。動的SQLを除いて –

関連する問題