【问题标题】:Convert 'x hrs y min z sec' to seconds将“x hrs y min z sec”转换为秒
【发布时间】:2015-07-28 04:36:22
【问题描述】:

a) 所以我有一个巨大的 .csv 数据文件夹,其中有一列关于持续时间的单元格是“x min y sec”(例如 15 min y sec)或“x hrs y min z sec”(例如 1小时 48 分 28 秒)。单元格按文本格式化。

我想将它们批量更改为秒数,但我不知道从哪里开始。我无法获取其他格式的数据。

我想过以某种方式使用“hrs”、“min”或“sec”作为分隔符,但我不知道如何从那里移动。我还考虑过使用 ' ' 作为分隔符,但是根据持续时间,第一列填充了小时或分钟。

我还考虑过使用 PostgreSQL 的 SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'),但我无法弄清楚如何在表中的列上使用它。

b) 有没有更好的方法可以将这种时间格式“Fri Mar 14 11:29:27 EST 2014”更改为纪元时间?现在我正在考虑在 Excel 中使用宏来摆脱“Fri”和“EST”,然后将列重新组合在一起,然后使用 PostgreSQL 中的 to_timestamp 函数。

【问题讨论】:

  • 这是在 Windows 上还是在某些版本的 Unix 上?您谈论 Excel,它被标记为“unix-timestamp”。
  • 数据是在PostgreSQL表中还是在CSV文件中?
  • 这是在 OSX 上。数据在 CSV 文件中,但我稍后会将其导入 PostgreSQL。

标签: excel postgresql timestamp epoch


【解决方案1】:

在 Excel 中,如果您只有这 2 种格式的数据并且从 A2 开始,您可以使用下面的 B2 中的公式复制来获取秒数:

=IFERROR(LEFT(A2,FIND("hrs",A2)-1)*3600,0)+SUM(MID(0&A2,FIND({"min","sec"},0&A2)-3,2)*{60,1})

它找到相关文本然后获取每个前面的数字并乘以相关数字以获得秒数

【讨论】:

    【解决方案2】:

    你可以这样做:

    SELECT EXTRACT(EPOCH FROM column_name::interval)
    FROM my_table;
    

    interval 可以使用常规时间单位(如hour)、其缩写(hr)和复数(hours)。不过,我不确定复数和缩写(hrs)的组合。如果这不起作用,UPDATE 列和replace() 子字符串“hrs”到“hours”。

    如果要保存表中的秒数,则将上述语句转换为UPDATE 语句:

    UPDATE my_table SET seconds_column = extract(epoch FROM column_name::interval);
    

    【讨论】:

      【解决方案3】:

      我会用空格作为分隔符,然后检查第二列。如果它包含字符串“hrs”,那么你的第二个答案是:

      3600 * 第 1 列 + 60 * 第 3 列 + 第 5 列

      否则:

      60 * 第 1 列 + 第 3 列

      【讨论】:

        猜你喜欢
        • 2021-06-26
        • 1970-01-01
        • 1970-01-01
        • 2016-09-25
        • 1970-01-01
        • 2017-08-12
        • 1970-01-01
        • 2015-10-30
        • 2020-05-03
        相关资源
        最近更新 更多