我有一些字段值包含5个空格作为分隔符,例如
AWERDC 123
我每周都会提取最终提交给外部人员,但是这些特定值中的任何一个都需要有一个'#'替换(AWERDC#123
)。我正在寻找在SELECT期间进行转换的最佳方法。
我该怎么办?
答案 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]