You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中SIMILAR TO模式匹配无结果问题求助

解决PostgreSQL CHAR(10)字段的SIMILAR TO匹配问题

问题原因

你的field_name列定义为CHAR(10),PostgreSQL会自动将存储的字符串用空格填充至10个字符长度。比如你看到的200,实际存储值是200加上7个空格,总长度为10。

第一个查询中2\[0-9\]\[0-9\]%的%表示匹配模式后可跟随任意字符(包括空格),所以能命中结果;而第二个查询[23][0-9][0-2]要求整个字符串完全匹配3个字符的模式,但实际字符串是10个字符(含空格),因此无结果返回。

解决方法

以下几种方案都可以解决这个问题:

  • 方案1:使用trim()去除末尾空格后匹配
    先去掉字段末尾的填充空格,再进行模式匹配:

    select distinct field_name, length(field_name) 
    from table_a 
    where trim(field_name) similar to '[23][0-9][0-2]';
    
  • 方案2:修改匹配模式兼容空格填充
    明确匹配开头3个符合规则的字符,后续为任意数量的空格(因为CHAR(10)固定长度,也可以精确匹配7个空格):

    -- 兼容任意数量后续字符(适合不确定填充长度的场景)
    select distinct field_name, length(field_name) 
    from table_a 
    where field_name similar to '[23][0-9][0-2]%' 
      and char_length(field_name) = 10;
    
    -- 精确匹配10个字符(3个目标字符+7个空格)
    select distinct field_name, length(field_name) 
    from table_a 
    where field_name similar to '[23][0-9][0-2]' || repeat(' ', 7);
    
  • 方案3:提取前3个字符进行匹配
    直接截取字段的前3个字符,只对这部分进行模式校验:

    select distinct field_name, length(field_name) 
    from table_a 
    where substring(field_name from 1 for 3) similar to '[23][0-9][0-2]';
    

内容的提问来源于stack exchange,提问作者M Remus Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:37:34