我遇到了MySQL查询的问题,该查询旨在根据用户的上次访问时间戳更新表中的用户记录.我想在2018年前将过go 没有访问过的用户的Enable列更新为0.

以下是我try 过的查询:

UPDATE mantis_user_table
SET enabled = 0
WHERE last_visit < DATE_SUB(NOW(), INTERVAL 5 YEAR);

然而,这个查询似乎没有像预期的那样工作,它正在更新所有内容. 我已经验证了last_visit列包含有效的时间戳数据.

有没有人能发现我的问题出在哪里,或者有没有人建议一种替代方法来达到预期的结果?

谢谢

推荐答案

您的值1669200237看起来像一个UNIX时间戳,这是一个32位整数.

mysql> select from_unixtime(1669200237);
+---------------------------+
| from_unixtime(1669200237) |
+---------------------------+
| 2022-11-23 02:43:57       |
+---------------------------+

如果不将日期时间转换为与UNIX_TIMESTAMP() function类似的整数,则无法将其与MySQL日期时间值进行比较.

UPDATE mantis_user_table
SET enabled = 0
WHERE last_visit < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 5 YEAR));

请记住,使用32位整数作为时间戳将在2038年成为一个问题,也就是说离现在不远的几年.

Mysql相关问答推荐

try 使用TypeORM创建新表时出现SQL语法错误

了解查询中ORDER BY的行为

左联接重复问题

MySQL连接序列

使用不同的 where 列进行子 Select

对匹配两个或多个表的表结果进行排序

多个 FULLTEXT 索引上的 MySQL SELECT.结果极其缓慢

go&mysql&docker 拒绝连接

sequelize 中最好的更新方法是什么

将sql查询转换为sequelize

过滤查询结果

MySQL如何在小时和分钟之间 Select 时间

MySQL REGEXP 在没有 BINARY 模式的情况下区分大小写?

mysql从另一个表中 Select 不相等的值

使用带有 ELSEIF 和 ELSE 的 3 列更新问题

加快 MySQL 中的行计数

如何使主键从 1000 开始?

Spring Boot:Jdbc javax.net.ssl.SSLException:在接收对等方的 close_notify 之前关闭入站

MySQL解释计划中 Select 优化的表的含义

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?