比较两列包含一列和一个添加

时间:2015-11-13 13:30:55

标签: sql sql-server-2012 sql-like

我有一个包含很多行的SQL表。此行中的列称为Label。

标签是不同数字的组合;这方面的例子是

11-1234-12-1020

前两个位置总是2(11)的组合,在第一个分隔符后总是4(1234)。标签的第三部分可以是1或2个值(即,它可以是1或12或其他一些随机的nmr)。第四部分是随机的,范围从1-99

在此表中,我也有完全相同的值,但在第四部分中它带有10或100(因此第四部分接收4个值)。 例如:11-1234-12-20

11-1234-12-1020SELECT A.LABEL, B.LABEL FROM TABLE A JOIN TABLE B ON A.LABEL = B.LABEL WHERE ?? 是相同的。 我想找到B部分包含A部分的所有这些值。

标签位于同一列中。

我已经彼此加入了专栏:

WHERE A.LABEL LIKE SUBSTRING(B.LABEL,1,12) + '10' + '%'

我的WHERE条款应该是什么? 我尝试过LIKE和SUBSTRING,但我错过了获取值。

Y.one("#element_id");

看到我是初学者,我有点卡住了。请帮助:)

2 个答案:

答案 0 :(得分:2)

这应该有效

SELECT A.LABEL, B.LABEL FROM TABLE A
 JOIN TABLE B ON
    CASE WHEN LEN(RIGHT(A.LABEL, CHARINDEX('-', reverse(A.LABEL))-1)) = 1
THEN
    STUFF(A.LABEL, LEN(A.LABEL) - CHARINDEX('-', reverse(A.LABEL))+1, 1, '-100') 
ELSE
    STUFF(A.LABEL, LEN(A.LABEL) - CHARINDEX('-', reverse(A.LABEL))+1, 1, '-10')
END = B.LABEL

所以基本上我们通过反转字符串找到字符串中-字符的最后位置:

CHARINDEX('-', reverse(A.LABEL)

然后我们在该点插入10或100以与其他标签进行比较。

答案 1 :(得分:1)

你需要在连接上进行 - 记住你要加入两个独立的集合(表格),你想要你的模式匹配的交集。

SELECT A.LABEL, B.LABEL
FROM TABLE A
    INNER JOIN TABLE B ON B.LABEL LIKE A.LABEL + '%'

干杯,T