MySQL在函数中使用表列来创建用于排序的别名

标签 mysql select

听起来比实际更复杂。这是我在 SELECT 部分中尝试做的事情:

SELECT TIMESTAMPADD(
          UCASE(
                 SUBSTRING(offset_unit,1,CHAR_LENGTH(offset_unit)-1)
                ),1,'2003-01-02') as offset_date

offset_unit 是数据库中的 VARCHAR 列。它包含以下内容之一:“小时”、“分钟”。

offset 是一个 INT。

在删除最后一个字符('s')之后,我正在尝试将 offset_unit 转换为大写,这样我就可以有一个适当的间隔(MINUTE,HOUR ...),这样我就可以得到一个我可以使用的日期在之后的排序中,但 MySQL 不断抛出错误。我通过一次添加一个函数来测试每个步骤,只有在我添加 TIMESTAMPADD 后它才会失败。如果我手动输入 MINUTE 则它会起作用。

有什么方法可以让它工作吗?

附加信息:我在 CakePHP 1.3 中运行它,在“字段”数组中的查找中,但这应该不重要。

最佳答案

这可以通过使用 CASE WHEN 子句轻松实现:

SELECT (CASE 
            WHEN offset_unit = 'HOURS' 
                   THEN TIMESTAMPADD(HOUR,`offset`,'2003-01-02')
            WHEN offset_unit = 'MINUTES' 
                   THEN TIMESTAMPADD(MINUTE,`offset`,'2003-01-02')
        END) AS offset_date
FROM my_table;

SEE SQLFIDDLE DEMO HERE

关于MySQL在函数中使用表列来创建用于排序的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12090185/

相关文章:

php - 如何在mysql登录过程中使用 bool 值

MySQL 复杂连接优化

mysql - SQL 从具有该值的不同 id 的列中选择值

Sqlite 获取最大 ID 不起作用(?)

select - Wicket 中的彩色下拉菜单

php - PDO 错误 : no database selected

Mysql Join 显示所有有或没有匹配记录的记录

C# DGV - 显示实时 MYSQL 数据库表

mysql - SQL QUERY-在 GROUP BY 中使用时,多个 COUNT 返回错误(相同)的结果

sql - 嵌套 SQL 语句但在内部语句中重用变量?