我有这样的字符串:
00 876H873 - 我想要876H873
00 876 876500 - 我想要876 876500
<00> 0000 HUJ8 9IU877 8UJH - 我想要HUJ8 9IU877 8UJH我用:
SELECT REPLACE(LTRIM(REPLACE(ColumnName, '0', ' ')),' ', '0')
这适用于第一种和第二种情况,即如果没有空间或只有一个空间;但是,如果有多个空格(例如第三个例子),我得不到正确答案。
答案 0 :(得分:0)
注释中引发的重复标记将指向您的工作答案,但您需要扩展SUBSTRING()
的长度以处理您的数据类型。
例如,如果您尝试完全复制代码并运行:
DECLARE @x VARCHAR(100)
SET @x = '0000HUJ8 9IU877 8UJH'
SELECT SUBSTRING(@x, PATINDEX('%[^0]%', @x), 10) -- note this uses '10'
你会得到错误的结果,HUJ8 9IU87
。这与额外的空间无关:你只是告诉SUBSTRING()
你需要10个字符,并且它会给你10个字符(巧合地会占据空间)。
如果您将SUBSTRING()
扩展为更长的值,如下面的代码所示,它将按预期工作:
DECLARE @x VARCHAR(100)
SET @x = '0000HUJ8 9IU877 8UJH'
SELECT SUBSTRING(@x, PATINDEX('%[^0]%', @x), 100) -- note this now uses '100'
将SUBSTRING()
的长度参数设置为您需要的数据类型,并且它将正常工作:它返回HUJ8 9IU877 8UJH
。
编辑:
如果你想删除前导空格,除了前导零之外,你还需要将公式更改为LTRIM(SUBSTRING(LTRIM(@x), PATINDEX('%[^0]%', @x), 100))
:我将LTRIM()
放在那里两次以处理前导空格,然后删除零,删除零后。