Sql 在选择期间用字符替换多个空格

Sql 在选择期间用字符替换多个空格,sql,substitution,Sql,Substitution,我有一些字段值包含5个空格作为分隔符,例如 AWERDC 123 我每周做一次摘录,最终提交给外部团体,但这些特定值中的任何一个都需要用“#”替换(AWERDC#123)。我正在寻找在选择过程中进行变换的最佳方法 我能做什么?如果您使用的是SQL Server,并且始终有5个空格,则可以使用replace(),如下示例: declare @s varchar(100) = 'AWERDC 123' select replace(@s, ' ', '#') 返回: AWERDC

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

AWERDC 123

我每周做一次摘录,最终提交给外部团体,但这些特定值中的任何一个都需要用“#”替换(
AWERDC#123
)。我正在寻找在选择过程中进行变换的最佳方法


我能做什么?

如果您使用的是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()
插入一个
来代替所有空格:


您可以在查询中尝试一个简单的替换

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

它总是正好5个空格,还是最多5个空格?您使用的是哪种DBMS?答案取决于DBMS,例如,在TSQL中,您可以使用
replace
SELECT REPLACE([Column], '     ','#') From [dbo.Table]