在SELECT期间用字符替换多个空格

时间:2017-11-14 16:56:22

标签: sql substitution

我有一些字段值包含5个空格作为分隔符,例如

  

AWERDC 123

我每周都会提取最终提交给外部人员,但是这些特定值中的任何一个都需要有一个'#'替换(AWERDC#123)。我正在寻找在SELECT期间进行转换的最佳方法。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

如果您使用的是SQL Server,并且总共有5个空格,则可以使用replace(),如下例所示:

declare @s varchar(100) = 'AWERDC     123'

select replace(@s, '     ', '#')

返回:

AWERDC#123

如果存在可变数量的空格,则可以使用stuff()charindex()patindex()来处理。此示例取决于可变数量的空格之前的字符是字母,空格之后的字符是数字。如果您的数据不是这样,则必须相应地修改patindex()

declare @s varchar(100) = 'AWERDC       123'

select stuff(@s, charindex(' ', @s, 1), patindex('%[0-9]%', @s) - charindex(' ', @s, 1), '#')

无论有多少空格,都会返回AWERDC#123

这是一种改进的方法,不关心前导和尾随字符中的字符类型。它只使用可变数量的空格,因为它向前搜索第一个空格,然后向后搜索第一个空格(在字符串中),进行数学运算,然后使用单个#代替所有空格stuff()

declare @s varchar(100) = 'AWERDC             123'

select stuff(@s, charindex(' ', @s, 1), len(@s) - charindex(' ', reverse(@s), 1) - charindex(' ', @s, 1) + 2, '#')

答案 1 :(得分:0)

您可以在查询中尝试使用简单的替换。

SELECT REPLACE([Column], '     ','#') From [dbo.Table]