SQL WHILE(字符串操作)

问题描述 投票:0回答:1

我有一个由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'
sql-server string tsql while-loop
1个回答
0
投票

如果我理解正确的话,这是我的建议:

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之后立即中断。

© www.soinside.com 2019 - 2024. All rights reserved.