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

时间:2015-05-16 08:05:50

标签: excel postgresql timestamp epoch

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'),但是我还没能弄清楚如何在表格的列上使用它。

b)有没有更好的方法将这种时间格式改为'2014年3月14日星期四11:29:27东部时间'到纪元时间?现在我正在考虑在Excel中使用宏来摆脱'Fri'和'EST',然后将列重新组合在一起,然后在PostgreSQL中使用to_timestamp函数。

3 个答案:

答案 0 :(得分:2)

在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})

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

答案 1 :(得分:1)

我会将空格分割为分隔符,然后检查第二列。如果它包含字符串" hrs",那么你的秒答案是:

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

否则它是:

60 *第1列+第3列

答案 2 :(得分:1)

你可以这样做:

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

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

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

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