首页 > 解决方案 > 像运算符正则表达式在 Posgresql 中无法按预期工作

问题描述

我在表中有以下数据

HJ-DEF-ABCF010-ABC18-09-17-D
GHJ-ABC-ABFV006-ABC18-09-18-R
OH-DEF-ABFCRT2037-ABC17-01-18-R

我想在另一列中填充值,例如

HJ-DEF-ABCF010-ABC18-09-17-D             BET
GHJ-ABC-ABFV006-ABD18-09-18-R            BET
OH-DEF-ABFCRT2037-ABCD17-01-18-R          BET

作为映射

ABC18 is BET   
ABD18 is BET
ABCD17 is BET

我为此使用了下面的 sql 查询

select col1,case 
when col1 like '%-ABC[1-2][0-9]-%' then BET 
when col1 like '%-ABD[1-2][0-9]-%' then BET 
when col1 like '%-ABCD[1-2][0-9]-%' then BET
else - end form table

这在 SQl 服务器中运行良好,但在 Pogresql 中我们不能使用 [1-2] 来找出该位置的预期数字。任何建议或想法如何在 Posgresql 中实现。

标签: sqlregexpostgresql

解决方案


您可以使用SIMILAR TO它与您所做的非常接近,LIKE因为它允许一些 POSIX 正则表达式模式。您甚至可以将模式合并为 1 个模式:

select col1,case 
when col1 SIMILAR TO '%-AB([CD]|CD)[1-2][0-9]-%' then BET
else - end from table

细节

  • %- 任何 0+ 个字符
  • -AB- 一个-AB子串
  • ([CD]|CD)- 一个C, 或D, 或CD
  • [1-2]-12
  • [0-9]-- 一个数字后跟-
  • %- 直到记录末尾的任何文本。

推荐阅读