簡體   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