将两列与包含一列和一个加法进行比较

Comparing two columns with containing one column and an addition

我有一个 SQL table 有很多行。此行中的一列称为标签。

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

11-1234-1-1
or
11-1234-12-20

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

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

11-1234-12-2011-1234-12-1020是一样的。 我想找到 B 部分包含 A 部分的所有这些值。

在同一列中找到标签。

我已经加入了彼此的专栏:

SELECT A.LABEL, B.LABEL
FROM TABLE A
JOIN TABLE B ON A.LABEL = B.LABEL
WHERE ??

我的 WHERE 子句应该是什么? 我尝试过使用 LIKE 和 SUBSTRING,但我没有获取值。

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

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

这应该有效

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 以与其他标签进行比较。

您需要在连接时执行此操作 - 请记住您正在连接两个独立的集合(表)并且您想要模式匹配的交集。

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

干杯,T