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

T-SQL转PostgreSQL通配符逻辑等效写法及通用转换规则咨询

问题核心原因

SQL Server(T-SQL)的LIKE运算符内置了方括号字符类匹配的扩展语法,%[a-z]%[0-9]%可以匹配包含至少一个小写字母、后续至少一个数字的字符串;但PostgreSQL的标准LIKE仅支持%(匹配任意长度任意字符)和_(匹配单个任意字符)两个通配符,方括号会被识别为普通字符,因此原语句无法匹配到结果返回B。

等效PostgreSQL写法

提供两种常用实现方案:

方案1:使用SIMILAR TO(语法最贴近原T-SQL)

SIMILAR TO是SQL标准定义的正则匹配语法,兼容LIKE的通配符规则,同时支持方括号字符类匹配,几乎不需要修改原有匹配逻辑:

SELECT
  CASE WHEN 'abcd 1234' SIMILAR TO '%[a-z]%[0-9]%' THEN 'A' ELSE 'B' END AS Q1

方案2:使用POSIX正则运算符~(功能更灵活)

PostgreSQL原生支持POSIX正则匹配,用~表示大小写敏感匹配,~*表示大小写不敏感匹配,对应写法如下:

SELECT
  CASE WHEN 'abcd 1234' ~ '.*[a-z].*[0-9].*' THEN 'A' ELSE 'B' END AS Q1

注意:POSIX正则中.*对应T-SQL LIKE的%(匹配任意长度任意字符),.对应_(匹配单个任意字符)。

T-SQL字符串匹配转PostgreSQL通用规则
  • 仅使用%、_通配符的简单LIKE逻辑:两个数据库语法完全一致,不需要修改。
  • 包含方括号字符类([a-z]、[^0-9]等)的匹配逻辑:优先替换为SIMILAR TO运算符,原有匹配规则几乎不需要调整;如果需要更复杂的匹配(比如量词、位置锚定等),可以替换为POSIX正则运算符。
  • 大小写匹配对齐:如果原T-SQL使用大小写不敏感的排序规则,PostgreSQL侧可以用ILIKE(对应不敏感LIKE)、~*(对应不敏感正则)对齐行为。
  • 转义字符处理:两个数据库都支持ESCAPE关键字定义转义符,用来匹配%、_、方括号等特殊字符本身,语法规则一致。

内容的提问来源于stack exchange,提问作者JimmyBuffet_Express

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:24:01