Redshift中传入空子串时strpos等函数返回1的原因是什么?
Redshift三个空串匹配SQL返回1的原因
你提到的三个SQL语句返回1是Redshift符合SQL字符串匹配规范的正常结果,核心逻辑是空字符串''被定义为默认匹配任意字符串的起始位置。
核心逻辑说明
Redshift中strpos、position、charindex三个函数的核心功能都是检索子字符串在目标字符串中首次出现的下标位置,Redshift的字符串下标默认从1开始计数。
按照ANSI SQL规范以及Redshift底层依赖的PostgreSQL字符串匹配规则,空字符串属于特殊的匹配值:不管目标字符串的内容是什么,空字符串都会在目标字符串的第1位匹配成功。甚至当目标字符串本身就是空串时,执行select strpos('', '')也会返回1,完全符合该规则。
三个函数的具体行为
strpos('X', ''):strpos参数顺序为「目标字符串、待匹配子串」,空串直接匹配'X'的起始位置,返回1position('' in 'X'):是strpos的同义语法糖,仅参数写法有差异,逻辑完全一致,空串匹配返回1charindex('', 'X'):为兼容SQL Server设计的等效函数,未指定第三个参数(起始查找位置)时默认从第1位开始检索,空串匹配首位置返回1
内容的提问来源于stack exchange,提问作者Austin Ulfers
相关产品推荐
相关产品推荐

