mysql - 如何使用字符串/列值作为 mysql 日期间隔常量(DAY、MONTH ...)?

标签 mysql datetime

我有三列:日期列、整数列和 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/

相关文章:

java - Google App Engine 留言簿示例无法工作,无法连接到数据库

java - 如何从netbeans向数据库插入数据?

mysql - 'where' 语句中具有多个条件的 Sailsjs 不起作用

postgresql - 如何正确测试日期在时间间隔内

mysql - rails : how to find all users older then n minutes ago where n is stored in joined group

mySQL8.0触发语句

mysql - 将这个带有 HABTM 相关数据的巨大查询转换为 CakePHP 查找

PHP:返回数组中两个日期之间的所有日期

.net:如何使用这种格式解析日期:2011 年 2 月 8 日 06:46

c# - 如何将 DateTime 格式化为 24 小时制?