我正在使用SQl pro。我想从表中获取过去24小时内收到的记录。让我们考虑表名称= INVENTORY,其中包含4列COL1,COL2,COL3和File_Name。表格中没有任何日期栏。但是File_Name列将始终具有格式为ABC_03_20180412_053028.txt的数据。 (ABC_03_YYYYMMDD_HHMMSS.txt)。我想知道如何使用文件名中的日期和时间来获取过去24小时内收到的表的记录。
答案 0 :(得分:0)
由于尚未标记正在使用的数据库,因此我试图给出一个通用答案。
假设文件名列遵循与'ABC_03_20180412_053028.txt'类似的模式,则可以尝试以这种方式解析file_name列,
select (split_part('ABC_03_20180412_053028.txt', '_',3) || ' ' ||
left(split_part('ABC_03_20180412_053028.txt', '_',4),6))::timestamp;
这将返回时间戳为
timestamp
---------------------
2018-04-12 05:30:28
尝试以此获取一天间隔,
select (split_part('ABC_03_20180412_053028.txt', '_',3) || ' ' ||
left(split_part('ABC_03_20180412_053028.txt', '_',4),6))::timestamp
+ '24 hours' :: interval;
答案 1 :(得分:0)
您将提取字符串并将其转换为日期。这取决于数据库,但是我猜您正在使用MySQL。如果可以,您可以像这样使用str_to_date()
:
str_to_date(substring(filename, 7, 15), '%Y%m%d_%h%i%s')
最近24小时的比较是:
str_to_date(substring(filename, 7, 15), '%Y%m%d_%h%i%s') >= now() - interval 24 hour and
str_to_date(substring(filename, 7, 15), '%Y%m%d_%h%i%s') < now()
第二部分可能不是必需的,因为文件可能没有将来的日期。