Redshift 中的模式匹配检查

Posted

技术标签:

【中文标题】Redshift 中的模式匹配检查【英文标题】:Pattern match check in Redshift 【发布时间】:2020-11-30 20:42:21 【问题描述】:

我的表列的一个值应为从 0 到 100 的百分比和以下值之一(R、MR、MS 或 S)的串联值。例如:20MS.

我应该使用REGEXP_COUNT 还是SIMILAR TO 来检查数据的有效性。 试过这个但不起作用:

SELECT REGEXP_COUNT('6A', '^[0-9]+(R|MR|MS|S)?')

有什么建议或解决方案吗?

【问题讨论】:

【参考方案1】:

使用

where column SIMILAR TO '[0-9]+(R|MR|MS|S)'

如果百分比后面的值是可选的,使用

where column SIMILAR TO '[0-9]+(R|MR|MS|S)?'

使用正则表达式运算符~可以实现

where column ~ '^[0-9]+(M?[RS])?$'

见regex proof。

说明

--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  [0-9]+                   any character of: '0' to '9' (1 or more
                           times (matching the most amount possible))
--------------------------------------------------------------------------------
  (                        group and capture to \1 (optional
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    M?                       'M' (optional (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    [RS]                     any character of: 'R', 'S'
--------------------------------------------------------------------------------
  )?                       end of \1 (NOTE: because you are using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \1)
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

【讨论】:

感谢您的解决方案。这在数字部分接受任何数字。我们如何验证数字部分在 0 到 100 之间。 @SatishTakkalapalli 你可以take this one。 '^([1-9][0-9]?|100)(M?[RS])?$'

以上是关于Redshift 中的模式匹配检查的主要内容,如果未能解决你的问题,请参考以下文章

在 Redshift 中使用正则表达式来获取匹配模式之前的单词

如何检查String是否与Groovy中的模式匹配

亚马逊 Redshift 的 REGEXP_SUBSTR 中的“匹配但排除”

检查字符串是不是与python中的IP地址模式匹配?

Eslint“没有找到匹配模式“lint”的文件。请检查模式中的输入错误。”错误

第3节 Scala中的模式匹配:1 - 5