听起来比实际更复杂。这是我在 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;
关于MySQL在函数中使用表列来创建用于排序的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12090185/