【问题标题】:Using DATE_SUB() based off dynamic field使用基于动态字段的 DATE_SUB()
【发布时间】:2013-08-25 23:53:48
【问题描述】:

如何在 DATE_SUB 计算中使用动态创建的字段?

我在下面有这个 SQL:

SELECT *, 
        CASE 
            WHEN `currentDate` IS NULL 
            THEN 
                `lastDate`
            ELSE 
                `currentDate`
        END AS `useDate`, 
        CASE 
            WHEN `type` = 'weekly' 
                THEN DATE_SUB(`useDate`, INTERVAL 1 WEEK)
            END AS `nextDate`
    FROM `aTable`

这不起作用,由于错误'#1054 - '字段列表'中的未知列'useDate'

如果我使用 Select * 中的实际字段,查询工作正常,但不会接受动态创建的字段。

在不必进行“以防万一”查询的情况下使用此方法的正确方法是什么?

【问题讨论】:

    标签: mysql sql dynamic


    【解决方案1】:

    您是否尝试在WHEN 中使用CASE 子句?

    SELECT *, 
            CASE 
                WHEN `currentDate` IS NULL 
                THEN `lastDate`
                ELSE `currentDate`
            END AS `useDate`, 
            CASE 
                WHEN `type` = 'weekly' 
                    THEN DATE_SUB(
                            CASE 
                                WHEN `currentDate` IS NULL 
                                THEN `lastDate`
                                ELSE `currentDate` 
                            END AS `useDate`
                        , INTERVAL 1 WEEK)
                END AS `nextDate`
        FROM `aTable`
    

    【讨论】:

    • 这是我想到的一种方法,但它看起来很乱(考虑到会有多个type)并且可能会加倍不需要的代码
    • 哦,我明白了。你问了一个解决方法,所以我给了你一个解决方法。 IMO 你应该放一些信息'你不想再在哪里使用 case-when'。是的,那很乱。子查询、视图或临时表怎么样?
    • 对不起,子查询可能是我的下一次尝试;只是想知道是否有一种巧妙的方法可以做到这一点:(
    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 2022-01-05
    • 2019-07-17
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多