SQL WHILE(字符串操作)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL WHILE(字符串操作)相关的知识,希望对你有一定的参考价值。

我有一个由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之后立即中断。

以上是关于SQL WHILE(字符串操作)的主要内容,如果未能解决你的问题,请参考以下文章

sql Closure表操作SQL片段

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段

sql 数据操作片段

sql数据库截取字符串函数

sql sql里面的代码片段

sql将字符串拆分为始终相同数量的片段