PostgreSQL中如何查询以单引号结尾的字符串记录?
PostgreSQL查询以单引号结尾字符串的正确实现
原有写法的问题
你使用的select * from cust where nam like '%'''语法上符合PostgreSQL规则:SQL标准用连续两个单引号表示字符串内的一个单引号常量,这段代码解析出的匹配模式为%',逻辑上对应以单引号结尾的字符串。但该写法极易因为单引号计数错误出现解析偏差,也可能受客户端转义配置影响导致匹配失效。
推荐解决方案
方案1:使用
right()函数直接判断末尾字符,逻辑直观兼容性最好SELECT * FROM cust WHERE right(nam, 1) = '''';原理:
right(字段名, 长度)会提取字段末尾指定长度的子串,直接和单引号做等值匹配,不需要处理LIKE的模式匹配规则,完全不会出现转义计数错误。方案2:使用PostgreSQL美元符引用规避单引号转义问题
SELECT * FROM cust WHERE nam LIKE $$%'$$;原理:美元符引用是PostgreSQL原生支持的字符串常量写法,
$$包裹的内容不需要做任何单引号转义,直接写%'即可得到需要的匹配模式,彻底避免单引号计数混乱。
你可以先插入测试数据验证效果:
INSERT INTO cust (nam) VALUES ('test'''), ('normal_str');
上述两种查询都会正确返回nam值为test'的记录。
内容的提问来源于stack exchange,提问作者magicbacon
相关产品推荐
相关产品推荐

