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中有两种格式的字符串:

  1. 正确格式为urutan 1432、1433、1436。
  2. 格式不正确,分别是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 不想为该部分匹配的字符,或者分享有关该部分如何组成的更多详细信息,我可以尝试改进模式匹配。