带like语句的sql左联接表

tcbh2hod  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(361)

我有两张table一张是 order 以及其他 sales ```
+-------------+
| OrderNumber |
+-------------+
| 1 |
| 2 |
+-------------+

+---------------+
| SalesNumber |
+---------------+
| /sales/1/lep |
| /sales/test/2 |
+---------------+

所以我想用左连接来表示数字重合的表,所以我想:

select * from order as o
left join sales as s on s.SalesNumber LIKE '%/'+o.OrderNumber+'%'

但是如果你犯了一个错误
将varchar值“%”转换为int数据类型时,转换失败。
我做错什么了?
ajsxfq5m

ajsxfq5m1#

你需要投下 OrderNumber 列作为 VARCHAR 然后做一个 CONCAT 或者 + 形成组合字符串的操作。
试试这个:

select * from order as o
left join sales as s 
    on s.SalesNumber LIKE CONCAT('%/', CAST(o.OrderNumber AS VARCHAR),'%')

如果有用的话就告诉我!

gj3fmq9x

gj3fmq9x2#

一个优点 concat() 你不需要转换——这个函数把数字转换成字符串。所以:

on s.SalesNumber LIKE CONCAT('%/', o.OrderNumber, '%')

你可以用 + ,但必须转换为字符串:

on s.SalesNumber like '%/' + convert(varchar(255), o.OrderNumber) + '%'

注意上面有一个长度 varchar() . 指定字符串时,请始终在sql server中使用长度。默认值因上下文而异,可能不符合您的要求。

相关问题