SQL - 左连接 - 仅限字符串的一部分

时间:2015-01-11 22:28:29

标签: sql sql-server join

我试图做一个左连接,应该很简单,我有两个问题;

  • 值为二进制
  • 我需要将一个字符串中的左侧3个字符连接到另一个字符串的右侧3个字符(从二进制文件更改后)

加入,留下这个的3个字符

convert(VARCHAR(max),(file_key7), 102)
db [RF_Sydney].[dbo].[std_file]

中的

这一个的右3个字符

convert(VARCHAR(max),(code_key), 11)
db [RF_Sydney].[dbo].[std_code]

中的

3 个答案:

答案 0 :(得分:3)

在SQL Server中,您可以加入任何可以满足的条件;换句话说,你可以这样做:

SELECT *
FROM dbo.std_file f LEFT JOIN std_code c 
ON LEFT(convert(VARCHAR(max),(f.file_key7), 102), 3)
= RIGHT(convert(VARCHAR(max),(c.code_key), 11),3)

性能会很糟糕(除非您使用持久计算列并定义索引)。

答案 1 :(得分:1)

执行此操作的最佳方法是在每个表中使用computed column。这将允许您简化连接代码,甚至允许您在列上定义索引以在需要时提高性能。至于获取左右值,可以使用LEFT()和RIGHT()函数:

LEFT(convert(VARCHAR(max),(file_key7), 102), 3)

RIGHT(convert(VARCHAR(max),(code_key), 11), 3)

对于连接表达式和查询本身,我们还没有足够的信息来确切知道您希望这些如何组合在一起。

答案 2 :(得分:0)

你知道file_key7或code_key的长度吗?加入LEFT(str,len)= RIGHT(str,len)应该可行,但可能会受到重大影响。也许你应该创建字段/列并将部分键粘贴在已经以正确字符格式转换的部分中