Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 문자열의 두 칸 이상 연속 공백을 제거하는 방법

사용자 정의 함수로 연속 공백 제거하기

MySQL에는 문자열 안에 포함된 두 칸 이상의 연속된 공백을 한 번에 정리하는 내장 함수가 없습니다. 따라서 직접 함수를 생성하는 것이 가장 효과적인 해결 방법입니다. 함수를 활용하면 앞뒤 공백 제거(TRIM)와 반복적인 공백 치환(REPLACE) 과정을 자동화할 수 있습니다.

함수 생성 기본 문법

먼저 함수를 만들기 위한 기본 문법은 다음과 같습니다.

DELIMITER //
CREATE FUNCTION yourFunctionName(parameter1,...N) RETURNS datatype
BEGIN
-- 실행할 구문
END;
//
DELIMITER ;

공백 제거 함수 만들기

아래 예제는 문자열의 앞뒤 공백을 먼저 잘라내고(trim), 두 칸 이상의 공백이 더 이상 남아 있지 않을 때까지 반복적으로 치환(replace)하는 함수입니다.

mysql> delimiter //
mysql> create function function_DeleteSpaces(value varchar(200)) returns varchar(200)
-> begin
-> set value = trim(value);
-> while instr(value, ' ') > 0 do
-> set value = replace(value, ' ', ' ');
-> end while;
-> return value;
-> END;
-> //
Query OK, 0 rows affected (0.20 sec)

mysql> delimiter ;

함수 호출하기

생성한 함수는 SELECT 문으로 간단히 호출할 수 있습니다. 기본 문법은 다음과 같습니다.

SELECT yourFunctionName();

이제 실제로 함수를 호출해 보겠습니다. 아래 예제에서는 앞뒤에 공백이 포함된 문자열을 매개변수로 전달합니다.

mysql> select function_DeleteSpaces(' John Smith ');

실행 결과는 다음과 같습니다. 앞뒤 공백이 제거되고 단어 사이의 공백도 하나로 정리된 것을 확인할 수 있습니다.

+--------------------------------------------------+
| function_DeleteSpaces(' John Smith ') |
+--------------------------------------------------+
| John Smith |
+--------------------------------------------------+
1 row in set (0.02 sec)

다른 값으로 테스트하기

이 함수는 두 칸 이상의 공백을 모두 하나로 줄여줍니다. 숫자가 포함된 새로운 값을 매개변수로 전달해 다시 테스트해 보겠습니다.

mysql> select function_DeleteSpaces(' John Smith 123 ');

실행 결과:

+---------------------------------------------------------+
| function_DeleteSpaces(' John Smith 123 ') |
+---------------------------------------------------------+
| John Smith 123 |
+---------------------------------------------------------+
1 row in set (0.00 sec)

정리

이처럼 MySQL에서는 TRIM, REPLACE, WHILE 루프를 조합한 사용자 정의 함수를 통해 문자열의 불필요한 연속 공백을 효율적으로 정리할 수 있습니다. 데이터 클렌징 작업이나 사용자 입력값 정규화 등 다양한 상황에서 유용하게 활용할 수 있으니, 필요에 따라 함수 이름과 VARCHAR 길이를 조정해서 사용해 보세요.