SQL使用列值作为查询字符串中的关键字

时间:2011-07-19 15:35:50

标签: mysql sql expression keyword

好的,这是示例查询:

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用作关键字。我有什么办法可以让它工作,或者我应该为单元添加一个检查并为每个可能的单位值硬编码关键字?

2 个答案:

答案 0 :(得分:1)

  

我真的只需要知道是否可以在查询字符串中使用列值作为关键字

NO

答案 1 :(得分: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语法而不是ADDDATE来简化代码(为了可读性而不是性能),但我不会使用MySQL来了解是否可能。 (...t.start_date + CASE t.unit WHEN 'YEAR' THEN INTERVAL t.period YEAR...)?