0

我有这样的字符串:

00 876H873 - 我想要 876H873

00 876 876500 - 我要 876 876500

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

我用:

SELECT REPLACE(LTRIM(REPLACE(ColumnName, '0', ' ')),' ', '0')

这适用于第一种和第二种情况,即如果没有空格或只有一个空格;但是,如果有多个空格(例如第三个示例),我没有得到正确的答案。

4

1 回答 1

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()你想要十个字符,它给你十个字符(巧合地上升到空间)。

如果将 扩展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()在删除零之前和删除零之后放入两次以处理前导空格。

于 2016-08-25T12:33:18.970 回答