2011-07-19 154 views
0

好了,所以這裏的例子查詢:查詢字符串中使用SQL列值作爲關鍵字

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

在所涉地區UPPER(t.unit),我想這expr來作爲一個MySQL的關鍵字進行治療(此列的可能值是日,周,月,年)。它拋出一個錯誤,因爲它不能使用expr作爲關鍵字。有什麼我可以做得到這個工作,或者我應該只是添加一個檢查單位和硬編碼每個可能的單位價值的關鍵字?

+0

數據庫是MySQL的 – chris

+0

你可以發佈後,編輯您的問題! – ascanio

+0

評論是更快 – chris

回答

1

我真的只需要知道它可以在查詢字符串使用的列值作爲關鍵字

NO

+0

除了動態SQL。 –

+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當然有它自己的缺點。 –