예를 들어 내 핸드폰 번호는 123 456 789입니다. 123456789로 출력해야합니다. 어떻게 구현합니까?SQL 서버 쿼리를 사용하여 핸드폰 번호에서 두 번째 발생 공간을 제거하는 방법
0
A
답변
3
여기에 논리적 인 접근 방식은 다음 REPLACE
최초의 우주까지 CHARINDEX
및 SUBSTRING
를 사용하여 두 개의 섹션으로 문자열을 분할하고, 최초의 우주 후 첫 번째 공백 다음에 오는 문자열 다음에 CONCAT
을 사용하여 문자열을 다시 묶습니다. 예 :
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)), ' ', ''));
그러나, 그것은 REPLACE
를 사용하는 모든 공백을 제거하고, 첫 번째가 원래 STUFF
를 사용하던 공간을 다시 삽입 실제로 간단하다 :
DECLARE @s VARCHAR(15) = '123 456 789';
SELECT STUFF(REPLACE(@s, ' ', ''), CHARINDEX(' ', @s), 0, ' ');
을 모든 것은 그 다음 할 일은 남아 공간이없는 경우를 확인하십시오. 전체 예 :
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
NB 나는 당신은 당신이 처음부터 떨어져 모든 공백을 대체 할 것인지, 제 2 공간을 대체 할 말을 할 때 그 가정을 만들었습니다 . 내 가정이 틀렸고 교체 할 공간이 2 번째 공간이면 작동하지 않습니다.
1
이 그것을 수행해야합니다
DECLARE @number AS NVARCHAR(12);
SELECT @number = '123 456 789';
SELECT STUFF(@number, CHARINDEX(' ', @number, CHARINDEX(' ', @number) + 1), 1, '') AS REMOVED_SECOND_SPACE;
0
DECLARE @s VARCHAR(12) = '111 222 333'
SELECT SUBSTRING(@s, 0, LEN(@s) - CHARINDEX(' ', REVERSE(@s)) + 1)
+ SUBSTRING(@s, LEN(@s) - CHARINDEX(' ', REVERSE(@s)) + 2, CHARINDEX(' ', REVERSE(@s)));
0
음, 다른 답변 이외에, 나는 당신이 뒤에 공백 세 자리를 할 것인지, 가정을 기반으로 simpliest을 게시합니다 다음 나머지 :
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
.