【发布时间】:2021-12-22 00:49:00
【问题描述】:
我创建了一个带有 3 个内部连接的存储过程(请不要评判我 :D):
SELECT
T.Name, A.Value
FROM
Table AS T
INNER JOIN
TableAnotherTable AS TA ON TA.ID_1 = T.ID_1
INNER JOIN
AnotherTable AS A ON A.ID_2 = TA.ID_2
INNER JOIN
EndTable AS ET ON ET.Value = A.Value
TableAnotherTable是Table和AnotherTable之间的关联表。因此,此存储过程在某些情况下有效(如果 ET.Value 等于 到 A.Value)。
但是如果:
ET.Value = 'SOME\THING\RIGHT\<ABC>\THERE'
A.Value= 'SOME\THING\RIGHT\{DEFGHILM}\THERE'
存储过程也必须工作。
如何将内部连接子句的最后一个ON(带有“=”)更改为:
Regex("pattern1", E.Value) like Regex("pattern", A.Value)
其中pattern 和pattern1 是({.*?}) 或(<.*?>)?
谢谢
例子:
ET.Value = 'HI'
A.Value = 'HI'
true
ET.Value = 'SOME\THING\RIGHT\<ABC>\THERE'
A.Value = 'SOME\THING\RIGHT\{DEFGHILMNOP}\THERE'
true
ET.Value = 'HOME\SWEET\HOME\<12345>\'
A.Value = 'HOME\SWEET\HOME\{4875928346}\'
true
ET.Value = 'EXAMPLE\<1234>'
A.Value = 'EG\{1234}'
false
ET.Value = 'dog'
A.Value = 'cat'
false
【问题讨论】:
-
和 {} 之间的文本也必须相等?唯一改变的是封装?
-
不,文字不同。我感兴趣的部分是 和 {} 之外的部分
-
@Carbon4horse 我已经更新了问题。
-
所以你想忽略
<>或{}之间的所有内容? -
其他问题:您是否需要匹配第三个反斜杠和最后一个反斜杠之后,还是真的只是
SameValue1DIFFERENTSameValue2,其中 SameValues 可以是任何东西(并且只是匹配)?
标签: sql sql-server stored-procedures inner-join