在我的数据库中,我们有一个以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
我不知道足够的正则表达式来过滤掉毫秒。
答案 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是完全相同的。 注意我已经转义了一些字符 - 所以不喜欢时间戳标记。