SQL条件-以动态值开头

SQL条件-以动态值开头,sql,db2,sql-like,Sql,Db2,Sql Like,我正在编写一个DB2存储过程,其中需要有一个条件来选择表1和表2中的所有值,其中table1.column_a从table2.column_b开始 select * from table1 T1, table2 T2 where T1.column_a like T2.column_b + '%' 我试着使用上面的SQL,但它似乎是无效的SQL。有什么建议吗 您可以使用concat()函数或|串联运算符+进行字符串连接 我会将其表述为加入: select * from table1 T1 jo

我正在编写一个DB2存储过程,其中需要有一个条件来选择表1和表2中的所有值,其中table1.column_a从table2.column_b开始

select * from table1 T1, table2 T2 where T1.column_a like T2.column_b + '%'

我试着使用上面的SQL,但它似乎是无效的SQL。有什么建议吗

您可以使用
concat()
函数或
|
串联运算符+进行字符串连接

我会将其表述为加入:

select *
from table1 T1 join
     table2 T2 
     on T1.column_a like concat(T2.column_b, '%');

您可以使用
concat()
函数或
|
串联运算符+进行字符串连接

我会将其表述为加入:

select *
from table1 T1 join
     table2 T2 
     on T1.column_a like concat(T2.column_b, '%');

考虑列a和列b有尾随空格,并且像操作数一样存在
问题。您可以始终使用
left()
并将其与
RTRIM()
组合使用。我在DB2方面的经验非常有限,但这是我的直觉

select  * 
from table1 T1
    INNER JOIN table2 T2 
    on LEFT(RTRIM(T1.column_a), LENGTH(RTRIM(T2.column_b))) = T2.column_b

考虑列a和列b有尾随空格,并且像操作数一样存在
问题。您可以始终使用
left()
并将其与
RTRIM()
组合使用。我在DB2方面的经验非常有限,但这是我的直觉

select  * 
from table1 T1
    INNER JOIN table2 T2 
    on LEFT(RTRIM(T1.column_a), LENGTH(RTRIM(T2.column_b))) = T2.column_b

添加一些示例表数据和预期结果。(作为格式化文本,而不是图像。)问题在于您的
like
语句添加一些示例表数据和预期结果。(作为格式化的文本,而不是图像。)问题在于你的
like
声明我使用了你的建议。但是,我在部署存储过程时出错。”LIKE的操作数无效。SQLCODE=-132,SQLSTATE=42824,DRIVER=4.17.30'我使用了你的建议。但是,我在部署存储过程时出错。”LIKE的操作数无效。SQLCODE=-132,SQLSTATE=42824,DRIVER=4.17.30'这是最接近的答案,但我敢打赌rtrim(t1.column_a)不需要它才能正常工作。我编辑了我的答案,因为@Gouri声明“LIKE的操作数无效”。如果是这种情况,那么我以前的答案也会失败。也许删除like可以解决这个问题。DB2也有一个locate函数。其中定位(修剪(t2.列_b),t1.列_a)0,但第二个rtrim也不需要。答案非常接近,但我不能再投票了。谢谢你的提示@danny117。那要干净得多。当我说经验有限时,我指的是6个月前(6年前)。)我删除了最后一个RTRIM,没有添加
内部连接
可能没有添加其他内容。再次感谢。AFAIK内部联接与联接相同至少对于此示例而言,这是最接近的答案,但我敢打赌rtrim(t1.column_a)不需要它才能正常工作。我编辑了我的答案,因为@Gouri声明“类似的操作数无效”。如果是这种情况,那么我以前的答案也将失败。也许删除like可以解决这个问题。DB2也有一个locate函数。其中定位(修剪(t2.列_b),t1.列_a)0,但第二个rtrim也不需要。答案非常接近,但我不能再投票了。谢谢你的提示@danny117。那要干净得多。当我说经验有限时,我指的是6个月前(6年前)。)我删除了最后一个RTRIM,没有添加
内部连接
可能没有添加其他内容。再次感谢。对于此示例,AFAIK内部连接与连接相同