我正试图根据日期删除数据库sqlite的一部分。我想删除所有超过31天的行,我的列datefin
采用bash格式:Mon Dec 14 05:00:02 2020
我试过了,但没用:
DATESTRING=$(date -d "now -30 day")
echo $DATESTRING
echo "delete from jobmemory where datefin < ' $DATESTRING'; vacuum;" | sqlite3 data.sqlite
sql行代码似乎无法识别我的日期格式。
您应该将日期的格式更改为YYYY-MM-DD hh:mm:ss
以使其具有可比性:
UPDATE jobmemory
SET datefin = SUBSTR(datefin, -4) || '-' ||
CASE SUBSTR(datefin, 5, 3)
WHEN 'Jan' THEN '01'
WHEN 'Feb' THEN '02'
WHEN 'Mar' THEN '03'
WHEN 'Apr' THEN '04'
WHEN 'May' THEN '05'
WHEN 'Jun' THEN '06'
WHEN 'Jul' THEN '07'
WHEN 'Aug' THEN '08'
WHEN 'Sep' THEN '09'
WHEN 'Oct' THEN '10'
WHEN 'Nov' THEN '11'
WHEN 'Dec' THEN '12'
END || '-' ||
SUBSTR(datefin, 9, 2) || ' ' ||
SUBSTR(datefin, 12, 8);
执行上述语句后,可以将datefin
与相同格式的日期时间进行比较
请参阅演示。
看看这个例子:
DATESTRING=$(date "+%Y-%m-%d %H:%M:%S" -d "now -30 day")
echo $DATESTRING
输出
2020-12-03 14:20:40
如果你想有这样的日期格式(2020年12月14日星期一05:00:02(试试这个代码
DATESTRING=$(date "+%a %b %d %H:%M:%S %Y" -d "now -30 day")
echo $DATESTRING
输出
Thu Dec 03 14:04:48 2020
测试它,我更改日期格式,它应该适用于你