我有三列:日期列、整数列和 varchar 列,如下所示:
+------------+------+---------+
| date |value | unit |
+------------+------+---------+
| 2009-01-01 | 2 | DAY |
| 2009-02-01 | 3 | MONTH |
+------------+------+---------+
我想在 mysql date_add() 函数中使用整数和 varchar 列的值作为“INTVERAL”表达式的一部分,添加到“日期”列中的日期。
例如: date_add(2009-01-01, INTERVAL 2 DAY), 所以 '2009-01-01' 来自 'date'列,“2”来自“value”/integer 列,“DAY”来自“unit”/varchar 列。
选择看起来像这样:
select date_add(table.date_column, INTERVAL table.integer_column table.varchar_column) from table
问题是:它不起作用。日期和整数列有效,所以没问题:
select date_add(table.date_column, INTERVAL table.integer_column DAY) from table
但是当我尝试用列中的字符串值替换“DAY”关键字时,我收到一条错误消息。
有什么想法吗?
我想更普遍的问题是:
如何将动态检索的值用作常量/键表达式?mysql 中是否有一种“eval”函数?
这个问题困扰了我很长时间,如果有任何帮助就太好了。
击败
最佳答案
不幸的是 MySQL 在 INTERVAL 之后需要一个关键字,而不是任何字符串或数值。您可以通过使用 CASE 语句并使用不同的关键字给出不同的案例来实现您想要的。
例如,假设您想将具有适当单位的值添加到日期,那么 SQL 语句将如下所示:
SELECT CASE unit
WHEN "DAY" THEN date_add(date, INTERVAL value DAY)
WHEN "MONTH" THEN date_add(date, INTERVAL value MONTH)
END
AS newDate
FROM table
顺便说一句,也适用于 WHERE 子句:)
关于mysql - 如何使用字符串/列值作为 mysql 日期间隔常量(DAY、MONTH ...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888971/