Redshift正则表达式错误?

时间:2019-03-07 16:19:10

标签: regex amazon-redshift

我有一个带有UK Postcode(英国邮政编码)字段的表,我将使用正则表达式测试不良格式,即使基本测试也无法正常工作。

我的值为CM8 2AX。

如果我跑步

从sor.party_person中选择邮政编码,其中'CM8 2AX'〜'。* [0-9] [A-Z] [A-Z] $'

and post_code ='CM8 2AX';

我知道

CM8 2AX

(1行)

这似乎表明我非常简单的正则表达式对于该值是正确的。

但是,如果我现在直接从数据库中测试相同的值-似乎是有效的查询,并已通过and条件证明这是字段中的值:

从sor.party_person中选择邮政编码,其中post_code〜'。* [0-9] [A-Z] [A-Z] $'和post_code ='CM8 2AX';

(0行)

它不匹配。

我想念什么?

如果我删除$末尾,它确实起作用,这意味着db在字段字符的末尾看到了不同的东西,并且没有将最后一个文本字符识别为最后一个字符,但这对我来说是没有意义的。

1 个答案:

答案 0 :(得分:1)

我认为该列的数据类型导致在邮政编码后的空格处添加空格字符,这在执行=时会被忽略,但在进行正则表达式匹配时显然不会被添加。

select post_code from sor.party_person where post_code ~ '.*[0-9][A-Z][A-Z] *$' and post_code = 'CM8 2AX';

应该证明这是正确的。

修改

我的判断是正确的,但显然不是=工作的原因。 SQL标准说,比较两个不等长的字符串时,将填充较短的字符串。因此,post_code = 'CM8 2AX'实际上是在进行比较之前将'CM8 2AX'填充到post_code列的长度。