0

你们中的任何人都可以在这里找出 mySQL 更新语句的语法错误吗?

update table_name set start_time = DATE_ADD (start_time , INTERVAL 2 DAY) where start_time = '2020-12-08 10:47:00';

以上是简单的 mySQL 查询,将 start_time(时间戳)更新 2 天。

AFAIK,以上应该可以工作,而且并不复杂。但我收到语法错误,我无法理解为什么会出现语法错误。这是我得到的错误...

数据库错误代码:1064。消息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 10 行的 ') where start_time = '2020-12-08 10:47:00'' 附近使用正确的语法

我还尝试过其他变体,例如...

update table_name set start_time = adddate (start_time , INTERVAL 2 DAY) where start_time = '2020-12-08 10:47:00';

update table_name set start_time = date_sub (start_time , INTERVAL -2 DAY) where start_time = '2020-12-08 10:47:00';

数据库错误代码:1064。消息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 ') where start_time = '2020-12-08 10:47:00'' 附近使用正确的语法

如果我在 select 语句中使用 date_sub,

select * from table_name where start_time  > DATE_SUB(now() , INTERVAL 2 DAY);

它确实像一个魅力。但我无法在 set =.... 的更新语句中使用它

我只是无法理解出了什么问题,并且很想知道语法有什么问题。你能建议吗?

4

1 回答 1

0

似乎问题在于函数名称和左括号之间的空格。

这:

DATE_ADD (start_time , INTERVAL 2 DAY)

应该写成:

DATE_ADD(start_time , INTERVAL 2 DAY)

在使用 的示例中没有发生这种情况DATE_SUB(),因为前导空格不存在。

并非所有 MySQL 函数都有这样的限制。这与 MySQL 解析器处理函数名称的方式有关,文档中对此进行了描述

函数调用在名称和括号之间没有空格的要求仅适用于具有特殊考虑的内置函数。

DATE_ADD()并被DATE_SUB()列为受影响的功能。您可以使用SQL 模式IGNORE_SPACE来更改默认行为。

总的来说,我会推荐像这样使用日期算术,所以你不必担心这样的警告(它也使得代码更具可读性):

start_time + INTERVAL 2 day
于 2020-12-10T19:18:32.210 回答