听起来比实际更复杂。以下是我在SELECT部分中要做的事情:
SELECT TIMESTAMPADD(
UCASE(
SUBSTRING(offset_unit,1,CHAR_LENGTH(offset_unit)-1)
),1,'2003-01-02') as offset_date
offset_unit 是数据库中的VARCHAR列。它包含以下之一:“小时”,“分钟”。
偏移是INT。
我正在尝试将offset_unit转换为大写,在我删除了最后一个字符('s')以便我可以有一个适当的间隔(MINUTE,HOUR ......)所以我可以得到一个我可以使用的日期在事后排序,但MySQL不断抛出错误。我已经通过一次添加一个函数来测试每个步骤,并且它只在我添加TIMESTAMPADD后失败。如果我手动输入MINUTE,那么它可以工作。
有什么方法可以让它发挥作用吗?
附加信息:我在CakePHP 1.3中运行它,在'fields'数组中的find中,但这不应该很重要。
答案 0 :(得分: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;
答案 1 :(得分:1)
它不起作用,因为TIMESTAMPADD
不将字符串作为第一个参数,而是 unit 关键字,例如MINUTE
。我的猜测是你需要分两步完成,首先获取单位然后用正确的关键字构造一个查询。