我正在將一些 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 等價于上述 case when 陳述句?此外,是否有人有將 tsql 字串邏輯轉換為 postgres 的一般經驗法則?
提前致謝!
uj5u.com熱心網友回復:
您在這里遇到的不同之處在于 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 通配符。
參考:
- https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql?view=sql-server-ver15
- https://www.postgresql.org/docs/current/functions-matching.html#LIKE
- https://www.postgresql.org/docs/current/functions-matching.html#POSIX-BRACKET-EXPRESSIONS
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337789.html
標籤:PostgreSQL 查询语句
