删除基于bash日期格式的列的sqlite-base



我正试图根据日期删除数据库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

测试它,我更改日期格式,它应该适用于你

相关内容

  • 没有找到相关文章

最新更新