Postgres - 从时间戳文本中删除毫秒

时间:2013-08-23 22:25:50

标签: sql regex postgresql

在我的数据库中,我们有一个以XML格式保存数据的列。其中一个XML元素包含如下所示的日期:

<timestamp>2013-05-22 16:01:26.78 CDT</timestamp>
<timestamp>2013-05-15 10:29:44.588 CDT</timestamp>
<timestamp>2013-02-27 09:37:54.677 CST</timestamp>

所以我使用:

<timestamp>之间提取了值
substring(table.column from '<timestamp>(.*)</timestamp>') as "Time Stamp"

但是我很难尝试使用正则表达式来删除毫秒。

我想要的是2013-02-27 09:37:54 CST

我不知道足够的正则表达式来过滤掉毫秒。

2 个答案:

答案 0 :(得分:1)

使用现有查询,您可以投射结果(​​请注意TIMESTAMPTZ(0)):

SELECT substring(col1,'<timestamp>(.*)</timestamp>')::TIMESTAMPTZ(0) as "Time Stamp"
FROM ...

答案 1 :(得分:0)

不应只使用:

/<timestamp>[^\.]*.([^\s]*)\s.*<\/timestamp>/

做到了吗?这是红宝石正则表达式,顺便说一句。

你想要的是“&lt; \ timestamp&gt;”,“任何非期间字符”,“。”,“任何非空白”,“空格”,“任何东西”,“&lt; / timestamp&gt;”

选择“任何非空白”。 (在红宝石中的parens)

希望有所帮助。不知道这个正则表达式有多大差异。有些像ruby和perl是完全相同的。 注意我已经转义了一些字符 - 所以不喜欢时间戳标记。