我得到了一个文本字符串由38个字符组成,我想在特定列中的数据库中搜索该字符串。如果有匹配,我希望从另一列中获得相应的值。如果找不到匹配,我希望该字符串从右侧的一个字符切断,并进行新的匹配搜索。这应该重复直到找到匹配,或者我的字符用完了
任何人都可以向我指出正确的方向吗?
这是我到目前为止制作的代码,但并没有真正做我期望的事情:
SET NOCOUNT ON
DECLARE @ITEM VARCHAR(38)
DECLARE @CTR INT = 0
DECLARE @RES VARCHAR(40)
SET @ITEM = 'KLS3055P3H01T01A3913 STDP STDP V2 SOMO'
SET @RES = NULL
WHILE @RES IS NULL
BEGIN
SET @RES = (SELECT A.a_nr FROM spekgbp.dbo.art A WHERE A.a_bet LIKE @ITEM)
SET @ITEM = LEFT(@ITEM, LEN(@ITEM)-1)
SET @CTR = @CTR + 1
IF (@CTR =10)
BREAK
END
SELECT @RES as 'RES', @ITEM as 'ITEM'
这是我的建议,如果我正确理解您:
SET NOCOUNT ON
DECLARE @ITEM VARCHAR(38)
DECLARE @CTR INT = 0
DECLARE @RES VARCHAR(40)
SET @ITEM = 'KLS3055P3H01T01A3913 STDP STDP V2 SOMO'
SET @RES = NULL
WHILE (1 = 1)
BEGIN
SET @RES = (SELECT MIN(A.a_nr) FROM spekgbp.dbo.art A WHERE A.a_bet = @ITEM)
IF (@RES IS NOT NULL)
BEGIN
BREAK
END
SET @ITEM = LEFT(@ITEM, LEN(@ITEM)-1)
SET @CTR = @CTR + 1
IF (@CTR = 10)
BEGIN
BREAK
END
END
SELECT @RES as 'RES', @ITEM as 'ITEM'
我添加了信息循环,因为找到匹配时@Item仍在末端切割,并在我的路上找到 @res后立即断开。