PostgreSQL:如何在 WHERE 子句中使用 REGEXP?
PostgreSQL: How to use REGEXP in WHERE clause?
我有如下记录:
urutan
desc
1432
AMAN032 - Gunting
1433
BENANG156 - Sikat Pintu
1434
Oli Bell One AT-D 20W40
1435
Water Refill
1436
KABUR001 - Gosok Air
1437
Kabel Ties 20 Cm - 50
基于上面的table,我在字段desc中有两种格式的字符串:
- 正确格式为urutan 1432、1433、1436。
- 格式不正确,分别是urutan 1434、1435、1437
如您所见,正确的格式如下所示:
AMAN032 - Gunting
然后我分裂:
[AMAN][032] - [Gunting]
[a word][3 digits number][space][-][space][any words]
.
我的目标是 SELECT 所有不符合正确格式的记录,在 WHERE 子句中使用 PosgreSQL REGEXP(在我不知道哪个 urutan 的情况下)。所以上面 table 的结果是 urutan 1434, 1435, 1437.
尝试以下查询:
SELECT *
FROM tab
WHERE NOT desc_ ~ '^[A-Za-z]+[0-9]{3} - [A-zA-Z ]+$'
正则表达式解释:
^
: 字符串开始
[A-Za-z]+
: 任意字母字符
[0-9]{3}
: 三位数
-
: space + 破折号 + space
[A-zA-Z ]+
:字母字符和space 的任意组合
$
: 字符串结束
试试看 here.
注意:此正则表达式中的漏洞可能在最后一个字母字符组合中。您可以在提供的 link 处使用它来包含或排除您 want/don 不想为该部分匹配的字符,或者分享有关该部分如何组成的更多详细信息,我可以尝试改进模式匹配。
我有如下记录:
urutan | desc |
---|---|
1432 | AMAN032 - Gunting |
1433 | BENANG156 - Sikat Pintu |
1434 | Oli Bell One AT-D 20W40 |
1435 | Water Refill |
1436 | KABUR001 - Gosok Air |
1437 | Kabel Ties 20 Cm - 50 |
基于上面的table,我在字段desc中有两种格式的字符串:
- 正确格式为urutan 1432、1433、1436。
- 格式不正确,分别是urutan 1434、1435、1437
如您所见,正确的格式如下所示:
AMAN032 - Gunting
然后我分裂:
[AMAN][032] - [Gunting]
[a word][3 digits number][space][-][space][any words]
.
我的目标是 SELECT 所有不符合正确格式的记录,在 WHERE 子句中使用 PosgreSQL REGEXP(在我不知道哪个 urutan 的情况下)。所以上面 table 的结果是 urutan 1434, 1435, 1437.
尝试以下查询:
SELECT *
FROM tab
WHERE NOT desc_ ~ '^[A-Za-z]+[0-9]{3} - [A-zA-Z ]+$'
正则表达式解释:
^
: 字符串开始[A-Za-z]+
: 任意字母字符[0-9]{3}
: 三位数-
: space + 破折号 + space[A-zA-Z ]+
:字母字符和space 的任意组合
$
: 字符串结束
试试看 here.
注意:此正则表达式中的漏洞可能在最后一个字母字符组合中。您可以在提供的 link 处使用它来包含或排除您 want/don 不想为该部分匹配的字符,或者分享有关该部分如何组成的更多详细信息,我可以尝试改进模式匹配。