我希望有人可以为我解决我的问题。
我需要能够在SQL
中将以下两个表连接在一起表1中某些列的值
QWERTY10
QAZWSXEDCR10
QAZWSXED1230
表2中某些列的值
QWWERTY20
QAZWSXEDCR20
QAZWSXED1240
我需要的结果是
QWERTY100000 QWERTY200000
QAZWSXEDCR10 QAZWSXEDCR20
QAZWSXED1230 QAZWSXED1240
现在,要将QWERTY10000链接到QWERTY20000,我需要对字段中值的前6个字符进行连接 但是要将QAZWSXEDCR10链接到QAZWSXEDCR20,我需要在字段中的值的前10个字符上进行连接。如果我只对前6个字符进行连接,那么我将获得重复。我会像这样说:
QAZWSXEDCR10 QAZWSXEDCR20
QAZWSXEDCR10 QAZWSXED1240
QAZWSXED1230 QAZWSXEDCR20
QAZWSXED1230 QAZWSXED1240
我还需要QAZWSXED1230
与QAZWSXED1240
相关联,我需要在8个字符上进行联接才能使其正常工作。
我很难弄清楚如何将我的数据加入到一起。我想避免根据不同数量的字符进行10次不同的连接。 例如,首先加入6个字符,如果不成功,则在7,8,9和10上进行连接。 - 必须采用不同的方式......
有人可以在这推荐一个解决方案吗?
KR
答案 0 :(得分:2)
正如Milney的评论中所提到的,PatIndex可能有助于找到第一个数字的字符串位置 - 如果适用的话还可以找到特殊字符。然后,您可以构造字符串匹配部分的子字符串
select table1.col as col1,
table2.col as col2
from table1
inner join
table2
on substring( table1.col, 1, patindex( '[0-9]', table1.col ) ) =
substring( table2.col, 1, patindex( '[0-9]', table2.col ) )
答案 1 :(得分:1)
这是对Alex答案的修改,只是为了处理其中一个或两个值不包含数字的情况:
select t1.col as col1, t2.col as col2
from table1 t1 inner join
table2 t2
on left(t1.col, patindex('%[0-9]%', t1.col+'0')) = left(t2.col, patindex('%[0-9]%', t2.col+'0'));
答案 2 :(得分:0)
我认为这会有所帮助
Create table #table1 ( strValue varchar(100) )
Create table #table2 ( strValue varchar(100) )
Insert Into #table1 ( strValue ) Values
('QWERTY10'), ('QAZWSXEDCR10'),('QAZWSXED1230')
Insert Into #table2 ( strValue ) Values
('QWERTY20'), ('QAZWSXEDCR20'),('QAZWSXED1240')
Declare @MaxlengthT1 int, @MaxlengthT2 int
SELECT @MaxlengthT1 = MAX(LEN(strValue)) FROM #table1
SELECT @MaxlengthT2 = MAX(LEN(strValue)) FROM #table2
select a.strValue + REPLICATE('0',@MaxlengthT1 - LEN(a.strValue)) as col1,
b.strValue + REPLICATE('0',@MaxlengthT1 - LEN(b.strValue)) as col2
from #table1 a
inner join
#table2 b
on substring( a.strValue, 0, patindex( '%[0-9]%', a.strValue )) =
substring( b.strValue, 0, patindex( '%[0-9]%', b.strValue ))
DROP TABLE #table1
DROP TABLE #table2