SQL中值长度未知时如何使用substring函数实现表关联查询
问题解答
首先你写的SQL存在一个基础错误:substring('t1.column1',9,x) 里给t1.column1加了单引号,会被数据库识别为固定字符串常量,而非取t1表的column1字段值,需要先去掉单引号调整为 substring(t1.column1,9,x)。
关于参数x的取值,分两种情况处理:
- 如果你使用MySQL、PostgreSQL等支持省略substring长度参数的数据库,完全不需要填写x,直接写成
substring(t1.column1, 9)即可,数据库默认会从第9位开始截取到字段末尾。 - 如果你使用SQL Server等强制要求填写长度参数的数据库,直接传入一个大于等于column1字段最大可能长度的数值即可,比如column1最大长度为200就填200;也可以直接用字段长度函数动态计算:
substring(t1.column1,9, LEN(t1.column1)),substring截取时如果指定长度超过剩余字符数,只会取到字段末尾,不会抛出异常。
你也可以换用更直观的写法实现相同需求,无需考虑长度参数问题:
select * from table1 t1 join table2 t2 on RIGHT(t1.column1, LENGTH(t1.column1) - 9) = t2.column2;
注:如果column1的长度小于9,上述截取逻辑都会返回空值,关联时会自动排除这类数据,符合需求预期。
内容的提问来源于stack exchange,提问作者Pushkar Anand
相关产品推荐
相关产品推荐

