首页 > 解决方案 > 使用 LIKE 语句左连接表

问题描述

我有两张桌子一张是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 时转换失败。

我究竟做错了什么?

标签: sqltsql

解决方案


一个优点concat()是您不需要转换——该函数将数字转换为字符串。所以:

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

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

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

请注意,在 上有一个长度varchar()。 指定字符串时,始终在 SQL Server 中使用长度。默认值因上下文而异,可能无法满足您的要求。


推荐阅读