我有一个有100000行的MySQL表。
每行只有一个名为unixtime的列,其中包含不同的unix时间戳。数据类型为long
除了unix时间戳是星期一的行之外,您将使用什么MySQL查询来删除所有行?
MySQL服务器默认时区的星期一。

最佳答案

使用UNIXTIME和DAYNAME中的函数
FROM_UNIXTIME将UNIXTIME戳记转换为DATETIME格式。
DAYNAME需要DATETIME格式来获取days名称。为什么使用DAYNAME函数而不是DAYOFWEEK函数?DAYNAME(...) <> 'Monday'更易于阅读,然后DAYOFWEEK(..) <> 2
这个问题不清楚您是想过滤掉记录还是真的从表中删除记录
因此,我包含了筛选记录的select查询和真正从表中删除这些记录的delete查询。
选择查询

SELECT
 *
FROM
 [table]
WHERE
 DAYNAME(FROM_UNIXTIME(unixtime)) <> 'Monday'

删除查询
DELETE
 *
FROM
 [table]
WHERE
  DAYNAME(FROM_UNIXTIME(unixtime)) <> 'Monday'

10-05 19:47