首页 > 解决方案 > T-SQL 到 Postgres 通配符逻辑

问题描述

我正在将一些 t-sql 查询转换为 postgres,但我无法理解 postgres 通配符逻辑。

例如:

tsql 中的以下查询将产生 'A' 但在 postgres 中它返回 'B'

    Select 
    case when 'abcd 1234' like '%[a-z]%[0-9]%' then 'A' else 'B' end as Q1

当声明时,与上述情况等效的 postgres 是什么?此外,是否有人有将 tsql 字符串逻辑转换为 postgres 的一般经验法则?

提前致谢!

标签: postgresqltsql

解决方案


您在这里遇到的不同之处在于 SQL Server 的 TSQL 通过方括号[]语法接受字符范围通配符,但 PostgreSQL 不接受。

相反,PostgreSQL 使用 RegEx 匹配运算符(的变体)在查询中合并了对 POSIX 正则表达式的支持,~以代替LIKE并在区分大小写和字符串匹配方面提供相当多的灵活性。

以 POSIX RegEx 语法重述您的原始查询以实现“A”的输出将类似于以下内容:

  Select 
    case when 'abcd 1234' ~ '(.*)[a-z](.*)[0-9](.*)' then 'A' 
    else 'B' end as Q1

至于处理这类转换的一般启发式概念,我建议 T-SQL 字符集通配符应该使用 RegEx 匹配运算符而不是LIKE. 否则,T-SQL%_通配符的行为等同于相同的 PostgreSQL 通配符。

参考:


推荐阅读