postgresql - 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 的一般经验法则?
提前致谢!
解决方案
您在这里遇到的不同之处在于 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 通配符。
参考:
推荐阅读
- c++ - C ++计算字符串中以'y'或'z'结尾的单词数
- java - 退回供应商
在java中 - javascript - 限制浏览器自动填充地址或浏览器提供自动填充建议的任何其他字段
- node.js - 如何使用带有 es 模块的 npm“调试”包
- postgresql - 使用 plpgsql 过程创建和访问全局状态
- graph - 通过交换转换矩阵的最小步骤数
- java - 如何使用 GridPane 和 HBox 使我的 javafx 表单中的所有字段都可点击?
- php - 通过键和值 PHP 对多数组进行分组
- javascript - 数据验证 - 正确显示密码要求
- javascript - Babel preset minify TypeError: _interopRequireDefault is not a function