我有一个包含很多行的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-1020
和SELECT 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");
看到我是初学者,我有点卡住了。请帮助:)
答案 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