根据文件名上的时间戳查询以获取最近24小时内收到的记录

时间:2018-10-07 06:00:28

标签: sql

我正在使用SQl pro。我想从表中获取过去24小时内收到的记录。让我们考虑表名称= INVENTORY,其中包含4列COL1,COL2,COL3和File_Name。表格中没有任何日期栏。但是File_Name列将始终具有格式为ABC_03_20180412_053028.txt的数据。 (ABC_03_YYYYMMDD_HHMMSS.txt)。我想知道如何使用文件名中的日期和时间来获取过去24小时内收到的表的记录。

2 个答案:

答案 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()

第二部分可能不是必需的,因为文件可能没有将来的日期。