数据仓库服务 GAUSSDB(DWS)-模式匹配操作符:SIMILAR TO

时间:2023-12-15 11:45:23

SIMILAR TO

SIMILAR TO操作符根据自己的模式判断是否匹配给定串而返回真或者假。它和LIKE非常类似,只不过它使用SQL标准定义的正则表达式理解模式。

  • 匹配规则
    1. 和LIKE一样,SIMILAR TO操作符只有在它的模式匹配整个串的时候才返回真。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。
    2. 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。
    3. SIMILAR TO也支持下面这些从POSIX正则表达式借用的模式匹配元字符。
      表1 模式匹配元字符

      元字符

      含义

      |

      表示选择(两个候选之一)。

      *

      表示重复前面的项零次或更多次。

      +

      表示重复前面的项一次或更多次。

      ?

      表示重复前面的项零次或一次。

      {m}

      表示重复前面的项刚好m次。

      {m,}

      表示重复前面的项m次或更多次。

      {m,n}

      表示重复前面的项至少m次并且不超过n次。

      ()

      把多个项组合成一个逻辑项。

      [...]

      声明一个字符类,就像POSIX正则表达式一样。

    4. 前导逃逸字符可以禁止所有这些元字符的特殊含义。逃逸字符的使用规则和LIKE一样。
  • 注意事项

    如果SIMILAR TO正则表达式重复匹配字符数量非常庞大,由于受递归大小限制,执行语句会失败并报错invalid regular expression: regular expression is too complex,可尝试调大GUC参数max_stack_depth

  • 正则表达式函数

    支持使用函数substring(string from pattern for escape)截取匹配SQL正则表达式的子字符串。

  • 示例
    1
    2
    3
    4
    5
    SELECT 'abc' SIMILAR TO 'abc' AS RESULT;
     result
    -----------
     t
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc' SIMILAR TO 'a' AS RESULT;
     result
    -----------
     f
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc' SIMILAR TO '%(b|d)%' AS RESULT;
     result
    -----------
     t
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc' SIMILAR TO '(b|c)%'  AS RESULT;
     result
    -----------
     f
    (1 row)
    
support.huaweicloud.com/sqlreference-dws/dws_06_0033.html