1. substr()函数差异
- 在oracle中,substr(x,0,3)与substr(x,1,3)的意思相同,都是截取第一个到第三个元素
select substr('ABCDEFG',0,3) as sub3_1
,substr('ABCDEFG',1,3) as sub3_2
from dual
- 在postgresq中,substr(x,0,3)截取前两位元素,substr(x,1,3)截取前三位元素
select substr('ABCDEFG',0,3) as sub3_1
,substr('ABCDEFG',1,3) as sub3_2
- 综上,在oracle的substr函数中,第二位的0和1代表的意思相同;在postgresql的substr函数中,第二位的0和1代表的意思不同,在做oracle数据库sql迁移到postgresql数据库sql的时候切记把第二位的0改为1
2. regexp_instr()函数差异
- 在oracle中,regexp_instr()函数同instr功能相似,返回正则表达式所匹配到字符所在“下标”
- 在postgresq中,postgresq15及以上版本才支持regexp_instr()函数,15以下版本需要结合substring()与position()函数才能实现类似功能,示例如下
select 'TestStr123' as str
,position(substring('TestStr123' from '[0-9]') in 'TestStr123')