gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:50:00 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com