【问题标题】:Loop through a character in sql遍历sql中的一个字符
【发布时间】:2015-05-22 08:03:04
【问题描述】:
DECLARE @valueList varchar(8000)
DECLARE @pos INT
DECLARE @len INT
DECLARE @value varchar(8000)

SET @valueList = '00000129563698'

set @pos = 0
set @len = 0

WHILE CHARINDEX('0', @valueList, @pos+1)<>0
BEGIN
    set @len = CHARINDEX('0', @valueList, @pos+1) - @pos
    set @value = SUBSTRING(@valueList, @pos, @len)

    PRINT @value

    set @pos = CHARINDEX('0', @valueList, @pos+@len) +1
END

我想从@valueList 变量中删除零并将剩余部分存储在另一个变量中。

如何在 sql 中做到这一点?

【问题讨论】:

  • 您是在问如何在单个语句中执行此操作,即没有 WHILE 循环吗?
  • 是的,任何可能性都可以。但是@valueList = '0000022956497698' 这会改变

标签: sql-server while-loop charindex


【解决方案1】:

您可以使用PATINDEX 函数来查找第一个非零数字;

DECLARE @valueList varchar(8000)

SET @valueList = '00000129563698'

SELECT SUBSTRING(@valueList, PATINDEX('%[1-9]%', @valueList), 8000)

【讨论】:

    【解决方案2】:

    试试这个!

    declare @orig varchar(100)
    set @orig='00000129563698'
    
    declare @dup varchar(100)
    
    
    set @dup= REPLACE(@orig,'0','')
    
    select @dup
    

    Demo To replace all zero's

    【讨论】:

      【解决方案3】:

      您可以转换为数字并再次转换为字符串。

      SET @valueList = convert(varchar,(convert(int,'00000129563698')))
      

      【讨论】:

      • @VijayPV,里面的零呢?就像'000000120244562007'
      • 内部零不应替换。无论如何,我得到了答案,感谢您为此花费宝贵的时间
      猜你喜欢
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多