T-SQL删除字符串中的前导零



我有一个这样的字符串:

00876H873 -我要876H873

00876 876500 - I want 876 876500

0000HUJ8 9IU877 8UJH -我想要HUJ8 9IU877 8UJH

我使用

:

SELECT REPLACE(LTRIM(REPLACE(ColumnName, '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()放在那里两次来处理前导空格,在删除零之前,在删除零之后。

相关内容

  • 没有找到相关文章

最新更新