sql - Postgres查询正则表达式否定不返回预期结果
问题描述
我使用 pgAdmin 4 中的查询工具连接了一个数据库。在其中一张表中,其中一列应包含正好为 8 位的值(例如 12345678)。
有 99 个正好是 8 个数字,还有 1 个是空的(null)。
我想创建一个查找空的查询。以下查询返回匹配的 99 条记录:
SELECT COUNT (*) FROM my_table WHERE my_column ~ '^[0-9]{8}$';
问题是当我添加 ! (负数,就在波浪号之前),我得到 0 个匹配项,而不是预期的 1 个:
SELECT COUNT (*) FROM my_table WHERE my_column !~ '^[0-9]{8}$';
知道会出什么问题吗?
解决方案
几乎所有比较操作都会NULL
在值为 - 时返回NULL
- 并WHERE
过滤掉NULL
。所以,要么添加一个明确的比较:
WHERE my_column !~ '^[0-9]{8}$' OR my_column IS NULL
或使用COALESCE()
:
WHERE COALESCE(my_column, '') !~ '^[0-9]{8}$'
推荐阅读
- bash - 如果进程产生了 xclip 的背景分支,则输出重定向挂起
- java - 准确调度任务以在 Java 中运行
- java - 如何使用 Apache POI 动态写入第 0 行?
- python - 如何在不破坏 ansi 转义码的情况下替换字符串?
- python-3.x - '没有这样的文件或目录'错误 Python for android
- python - 应用分层10折交叉验证时如何在python中获取所有混淆矩阵的聚合
- delphi - Delphi 无效的类型转换
- java - 我的导航主机无法触发片段操作
- javascript - 在数组中添加对象
- loops - 是否可以使用 while 循环制作标签?