繁体   English   中英

SQL 删除所有日期早于 x 天的行

[英]SQL delete all rows with date older than x days

我有一个如下表,我正在尝试从当前日期中删除 createdDate 超过 10 天的所有行,例如要从表中删除的最后 3 个流

ID  Name    createdDate(string)
76  Stream1 2018-10-18T00:00:00 
70  Stream2 2018-10-17T00:00:00 
50  Stream3 2018-10-03T00:00:00 
32  Stream4 2018-09-22T00:00:00 
21  Stream5 2018-09-21T00:00:00 

我试过下面查询但没有用,有人可以帮忙吗

DELETE FROM myTable WHERE TO_DATE(createdDate) < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 10 DAY))

DELETE FROM myTable WHERE TO_DATE(createdDate) < NOW()- INTERVAL 10 DAY;

为了性能,为了允许 MySQL 使用范围扫描(使用以createdDate作为前导列的索引),我将在WHERE子句中引用列。

我会在比较的文字方面进行任何必要的操作,以得出一个字符串,我们可以将其与裸列进行比较。

我会先写一个 SELECT 语句,以验证它是否有效(在我们运行 DELETE 并发现它删除的比我们预期的更多之前)

我们可以在一个简单的 SELECT 语句中测试表达式,例如

SELECT DATE_FORMAT( NOW() + INTERVAL -10 DAY , '%Y-%m-%dT00:00:00') AS dt 

然后我们可以在 WHERE 子句中使用该表达式

SELECT t.* 
  FROM myTable t 
WHERE t.createddate  <   DATE_FORMAT( NOW() + INTERVAL -10 DAY , '%Y-%m-%dT00:00:00')
ORDER BY t.createddate DESC

此表达式使用午夜'00:00:00'作为时间分量; 还有其他表达式可以达到相同的结果。

WHERE t.createddate  <   DATE_FORMAT( DATE(NOW()) + INTERVAL -10 DAY , '%Y-%m-%dT%T')

我们确实需要缩小范围并具体说明“比当前日期早 10 天”的含义。

一旦我们确定查询正在返回我们想要删除的行,我将通过替换 SELECT 关键字并省略 ORDER BY 将其转换为 DELETE 语句

SELECT t.* 
  FROM myTable t 
WHERE t.createddate  <   DATE_FORMAT( NOW() + INTERVAL -10 DAY , '%Y-%m-%dT00:00:00')

我不认为to_date()是 MySQL 中的函数。 只需使用date()

DELETE FROM myTable
WHERE DATE(createdDate) < NOW() - INTERVAL 10 DAY;

MySQL 中没有To_date()函数。 您将需要改用Str_To_Date()函数:

数据库小提琴演示

DELETE FROM myTable 
WHERE STR_TO_DATE(createdDate, '%Y-%m-%dT%T') < NOW()- INTERVAL 10 DAY;

细节:

  • %Y年份为 4 位数字值
  • %m月份名称为数值(00 到 12)
  • %d以数值表示的月份中的第几天(01 到 31)
  • %T时间为 24 小时格式 (hh:mm:ss)
  • 您的日期时间字符串中有一个额外的“T”子字符串。 直接用T表示

我认为比较双方都需要日期转换

   DELETE FROM myTable 
   WHERE DATE(createdDate) < date(NOW()- INTERVAL 10 DAY);

MySQL 中没有函数TO_DATE 你可以试试这个查询:

DELETE FROM myTable WHERE DATE(createDate) < DATE_SUB(NOW(), INTERVAL 10 DAY);

从 myTable 中删除 t WHERE t.createdDate< NOW() - 间隔 10 天;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM