在 SQL Server 中,下面的函数可以解决问题。
(但如果我们有一个很长的字符串在子字符串中包含引号,这将不起作用)
逻辑:我们找到字符的第一个位置,然后是它出现的第二个位置,并用'_'替换空格。将第一个位置更改为第二个位置并继续...
CREATE OR ALTER FUNCTION replace_spc_with_uscore(@string VARCHAR(max)) RETURNS VARCHAR(max) as
BEGIN
declare @max_cnt INT , @pos1 INT ,@pos2 INT = 1,@pos2_t INT = 1 , @tmp_str VARCHAR(max)=@string , @old_str VARCHAR(max) , @final_str VARCHAR(max)=@string
select @max_cnt= len(@string) - len(replace(@string, '`', ''))
while @max_cnt > 0
BEGIN
select @pos1=CHARINDEX('`', @string , @pos2)
select @pos2_t=CHARINDEX('`', @string , @pos1+1)
select @pos2=CHARINDEX('`', @string , @pos1+1) - @pos1+1
SELECT @old_str=SUBSTRING(@string,@pos1,@pos2)
SELECT @tmp_str=REPLACE ( SUBSTRING(@string,@pos1,@pos2) ,' ','_')
SELECT @final_str=REPLACE (@final_str, @old_str, @tmp_str)
Select @max_cnt=@max_cnt-2 , @pos2=@pos2_t+1--@pos2+1
END
--select @final_str
RETURN @final_str
END
希望在需要类似功能的情况下会有所帮助。