将 'x hrs y min z sec' 转换为秒

Convert 'x hrs y min z sec' to seconds

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

我想批量修改秒数,但是不知道从何下手。我无法获取其他格式的数据。

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

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

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

我会用 space 作为分隔符进行拆分,然后检查第二列。如果它包含字符串 "hrs",那么您的第二个答案是:

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

否则为:

60 * 第 1 列 + 第 3 列

你可以这样做:

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

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

如果你想在你的table中保存秒数,那么你将上面的语句转换成UPDATE语句:

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

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

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

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