Teradata SQL Assistant中Like运算符匹配_0结尾ID结果异常问题
问题原因
在Teradata SQL的LIKE运算符语法中,_是内置的单字符通配符,作用是匹配任意1个字符,而非普通的下划线字面量。
你写的查询条件id like '%_0'实际的匹配逻辑是:
- 开头可以是任意长度的任意字符(
%通配符的作用) - 结尾倒数第二位是任意1个字符(
_通配符的作用) - 结尾最后一位是字符
0
你给出的三个id值都符合这个逻辑:
23_0:倒数第二位是_、最后一位是0,匹配111_10:倒数第二位是1、最后一位是0,匹配201_540:倒数第二位是4、最后一位是0,匹配
因此会返回全部三条数据。
解决方案
- 方案1:对下划线进行转义,指定转义字符将
_识别为普通字面量
select * from A where id like '%\_0' escape '\'
这里用ESCAPE关键字指定\为转义符,\_就会被识别为普通的下划线字符,只会匹配以_0结尾的id值。
- 方案2:直接截取末尾两位做精确匹配,避开通配符逻辑
select * from A where right(id, 2) = '_0'
这个方案逻辑更直观,不需要处理通配符转义规则,执行效率和方案1基本一致。
内容的提问来源于stack exchange,提问作者Mado.h
相关产品推荐
相关产品推荐

