0

在我的数据库中,我们有一列以 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

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

4

2 回答 2

1

使用您现有的查询,您可以转换结果(注意TIMESTAMPTZ(0)):

SELECT substring(col1,'<timestamp>(.*)</timestamp>')::TIMESTAMPTZ(0) as "Time Stamp"
FROM ...
于 2013-08-23T23:09:47.307 回答
0

不应该只使用:

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

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

你想要的是 "<\timestamp>"、"any non-period chars"、"."、"any nonwhitespace"、"a space"、"anything"、"</timestamp>"

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

希望有帮助。不知道正则表达式有多少变化。有些像 ruby​​ 和 perl 是相同的。注意我已经转义了一些字符 - 所以不喜欢时间戳标签。

于 2013-08-23T22:46:19.850 回答