如何使用sql server查询删除手机号码中的第二个占用空间

如何使用sql server查询删除手机号码中的第二个占用空间,sql,sql-server,string-formatting,phone-number,Sql,Sql Server,String Formatting,Phone Number,例如,我的手机号码是123 456 789,我需要输出为123 456789。 如何做到这一点?这应该做到: DECLARE @number AS NVARCHAR(12); SELECT @number = '123 456 789'; SELECT STUFF(@number, CHARINDEX(' ', @number, CHARINDEX(' ', @number) + 1), 1, '') AS REMOVED_SECOND_SPACE; 这应该做到: DECLARE @num

例如,我的手机号码是123 456 789,我需要输出为123 456789。 如何做到这一点?

这应该做到:

DECLARE @number AS NVARCHAR(12);
SELECT @number = '123 456 789';

SELECT STUFF(@number, CHARINDEX(' ', @number, CHARINDEX(' ', @number) + 1), 1, '')  AS REMOVED_SECOND_SPACE;
这应该做到:

DECLARE @number AS NVARCHAR(12);
SELECT @number = '123 456 789';

SELECT STUFF(@number, CHARINDEX(' ', @number, CHARINDEX(' ', @number) + 1), 1, '')  AS REMOVED_SECOND_SPACE;

这里的逻辑方法是使用and将字符串分成两部分,直到第一个空格,在第一个空格之后,然后在第一个空格之后,使用and将字符串重新组合在一起。e、 g

DECLARE @s VARCHAR(15) = '123 456 789';

SELECT  BeforeSpace = SUBSTRING(@s, 1, CHARINDEX(' ', @s)),
        AfterSpace = SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)),
        ReplaceAfterSpace = REPLACE(SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)), ' ', ''),
        Result = CONCAT(SUBSTRING(@s, 1, CHARINDEX(' ', @s)),
                        REPLACE(SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)), ' ', ''));
但是,实际上更简单的方法是使用删除所有空格,然后重新插入第一个空格最初使用的空格:

剩下要做的就是检查没有空间的情况。完整示例:

DECLARE @T TABLE (s VARCHAR(15));
INSERT @T VALUES ('123 456 789'), ('123456789'), ('123456 789'), ('123 4 5 6 789');

SELECT  Original = s,
        Method1 = CASE WHEN CHARINDEX(' ', s) = 0 THEN s
                        ELSE CONCAT(SUBSTRING(s, 1, CHARINDEX(' ', s)), 
                                REPLACE(SUBSTRING(s, CHARINDEX(' ', s), LEN(s)), ' ', ''))
                    END,
        Method2 = CASE WHEN CHARINDEX(' ', s) = 0 THEN s
                        ELSE STUFF(REPLACE(s, ' ', ''), CHARINDEX(' ', S), 0, ' ')
                    END
FROM    @T;
输出

Original        Method1         Method2
-------------------------------------------
123 456 789     123 456789      123 456789
123456789       123456789       123456789
123456 789      123456 789      123456 789
123 4 5 6 789   123 456789      123 456789

注意:我假设当你说你要替换第二个空格时,你要替换除第一个空格以外的所有空格。如果我的假设是错误的,并且您只想替换第二个空格,那么这将不起作用。

这里的逻辑方法是使用and将字符串分成两部分,直到第一个空格,在第一个空格之后,然后是第一个空格之后的字符串,然后使用and将字符串重新组合在一起。e、 g

DECLARE @s VARCHAR(15) = '123 456 789';

SELECT  BeforeSpace = SUBSTRING(@s, 1, CHARINDEX(' ', @s)),
        AfterSpace = SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)),
        ReplaceAfterSpace = REPLACE(SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)), ' ', ''),
        Result = CONCAT(SUBSTRING(@s, 1, CHARINDEX(' ', @s)),
                        REPLACE(SUBSTRING(@s, CHARINDEX(' ', @s), LEN(@s)), ' ', ''));
但是,实际上更简单的方法是使用删除所有空格,然后重新插入第一个空格最初使用的空格:

剩下要做的就是检查没有空间的情况。完整示例:

DECLARE @T TABLE (s VARCHAR(15));
INSERT @T VALUES ('123 456 789'), ('123456789'), ('123456 789'), ('123 4 5 6 789');

SELECT  Original = s,
        Method1 = CASE WHEN CHARINDEX(' ', s) = 0 THEN s
                        ELSE CONCAT(SUBSTRING(s, 1, CHARINDEX(' ', s)), 
                                REPLACE(SUBSTRING(s, CHARINDEX(' ', s), LEN(s)), ' ', ''))
                    END,
        Method2 = CASE WHEN CHARINDEX(' ', s) = 0 THEN s
                        ELSE STUFF(REPLACE(s, ' ', ''), CHARINDEX(' ', S), 0, ' ')
                    END
FROM    @T;
输出

Original        Method1         Method2
-------------------------------------------
123 456 789     123 456789      123 456789
123456789       123456789       123456789
123456 789      123456 789      123456 789
123 4 5 6 789   123 456789      123 456789

注意:我假设当你说你要替换第二个空格时,你要替换除第一个空格以外的所有空格。如果我的假设是错误的,并且您只想替换第二个空格,那么这将不起作用。

好吧,除了其他答案之外,我将根据假设发布最简单的答案,即您希望三位数字后跟空格,然后是其他数字:

declare @x1 varchar(15), @x2 varchar(15), @x3 varchar(15), @x4 varchar(15), @x5 varchar(15)
set @x1 = '123456789'
set @x2 = '123 456789'
set @x3 = '123 456 789'
set @x4 = '123456 789'
set @x5 = '1 2 3 4 5 6 7 8 9'

select stuff(replace(@x1, ' ', ''), 4, 0, ' ')
select stuff(replace(@x2, ' ', ''), 4, 0, ' ')
select stuff(replace(@x3, ' ', ''), 4, 0, ' ')
select stuff(replace(@x4, ' ', ''), 4, 0, ' ')
select stuff(replace(@x5, ' ', ''), 4, 0, ' ')

所有输出都是相同的:
123456789

好吧,除了其他答案之外,我将发布最简单的,基于假设,您希望有三位数字后跟空格,然后是其余数字:

declare @x1 varchar(15), @x2 varchar(15), @x3 varchar(15), @x4 varchar(15), @x5 varchar(15)
set @x1 = '123456789'
set @x2 = '123 456789'
set @x3 = '123 456 789'
set @x4 = '123456 789'
set @x5 = '1 2 3 4 5 6 7 8 9'

select stuff(replace(@x1, ' ', ''), 4, 0, ' ')
select stuff(replace(@x2, ' ', ''), 4, 0, ' ')
select stuff(replace(@x3, ' ', ''), 4, 0, ' ')
select stuff(replace(@x4, ' ', ''), 4, 0, ' ')
select stuff(replace(@x5, ' ', ''), 4, 0, ' ')
所有输出都将相同:
123 456789