红移中的正则表达式

Posted

技术标签:

【中文标题】红移中的正则表达式【英文标题】:Regular Expression in redshift 【发布时间】:2016-07-26 14:34:11 【问题描述】:

我有一个以以下格式输入的数据 -

2016-006-011 04:58:22.058

这是不正确的日期/时间戳格式,为了将其转换为正确的格式,如下所示 -

2016-06-11 04:58:22.058

我正在尝试在 redshift 中使用正则表达式来实现这一点。有没有办法使用正则表达式删除日期和月份部分中的额外零(0)。由于日期会有所不同,因此我需要更通用的东西,而不是仅针对此示例进行跟踪。

【问题讨论】:

Find (\d4-)\d?(\d2-)\d?(\d2) Replace $1$2$3 你必须定义通用日期格式。收集所有使用的日期格式,制作一个通用的正则表达式。 【参考方案1】:

函数regexp_replace()(参见documentation)应该可以解决问题:

select
    regexp_replace(
      '2016-006-011 04:58:22.058'  -- use your date column here instead
    , '\-0([0-9]2\-)0([0-9]2)' -- matches "-006-011", captures "06-" in $1, "11" in $2
    , '-$1$2'                      -- inserts $1 and $2 to give "-06-11"
    )
;

所以结果是,根据需要:

     regexp_replace
-------------------------
 2016-06-11 04:58:22.058
(1 row)

【讨论】:

以上是关于红移中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊红移中的 SQL 正则表达式 substr 函数

使用 SQL 的 Amazon Redshift 中的正则表达式

如何在红移中进行动态正则表达式匹配?

正则表达式/红移

如何选择特定范围(使用红移正则表达式)

红移正则表达式匹配