将两列与包含一列和一个加法进行比较
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-20
和11-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
我有一个 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-20
和11-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