regex - Redshift 正则表达式错误?
问题描述
我有一张带有英国邮政编码字段的表格,我将仅使用正则表达式测试不良格式,即使是基本测试也无法正常工作。
我的值为 CM8 2AX。
如果我跑
从 sor.party_person 中选择 post_code where 'CM8 2AX' ~ '.*[0-9][AZ][AZ]$'
和 post_code = 'CM8 2AX';
我明白了
CM8 2AX
(1 行)
这似乎表明我非常简单的正则表达式对于该值是正确的。
然而,如果我现在直接从数据库中测试相同的值 - 看起来实际上是相同的查询,用 and 条件证明这是该字段中的值:
从 sor.party_person 中选择 post_code 其中 post_code ~ '.*[0-9][AZ][AZ]$' and post_code = 'CM8 2AX';
(0 行)
它不匹配。
我错过了什么?
如果我在最后删除 $,它确实有效,这意味着 db 看到的内容与字段字符的结尾不同,并且没有将最后一个文本字符识别为最后一个字符,但这对我来说毫无意义。
解决方案
我认为列的数据类型导致在邮政编码之后添加空格字符到列的大小,这在执行 = 时会被忽略,但在进行正则表达式匹配时显然不会。
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 列的长度。
推荐阅读
- python - KeyError:networkX中的“颜色”
- python - 合并两个数据帧时的内存问题
- javascript - NextJS 如何创建动态后端路由
- javascript - 如何使用 addEventListener (keyup) 而不是 HTML 中的 onkeyup 属性获得相同的结果?
- visual-studio-code - 在 VSCode 扩展中,如何用从另一个文件读取的内容填充未命名的未保存文件?
- ios - React Native,ITMS-90078:缺少推送通知权利
- python - 当没有函数来计算要获取的记录总数时,如何使用 API 使用 Python 提取数据
- php - 未捕获的错误:找不到类“Illumninate\Support\Collection”
- python - /polls/add/ 处的 ValueError 视图 polls.views.addQuestion 未返回 HttpResponse 对象。它返回 None 而不是
- azure - Visual Studio 2019 无法创建 ADO.NET 实体数据模型