MySQL에서 문자열의 마지막 문자가 특정 문자(예: 물음표 '?')인 경우 이를 제거하려면 SUBSTRING() 함수를 사용하면 됩니다. 먼저 예제 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
SubjectName varchar(100)
);
Query OK, 0 rows affected (0.47 sec)INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('MySQL');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('MongoDB?');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Java?');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('C');
Query OK, 1 row affected (0.16 sec)SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+-------------+ | SubjectName | +-------------+ | MySQL | | MongoDB? | | Java? | | C | +-------------+ 4 rows in set (0.00 sec)
위 결과에서 'MongoDB?'와 'Java?'처럼 일부 레코드는 물음표(?)로 끝나는 것을 확인할 수 있습니다. 이제 마지막 문자가 물음표인 경우 이를 제거하는 쿼리를 살펴보겠습니다.
마지막 문자가 특정 문자일 때 제거하는 UPDATE 쿼리
SUBSTRING() 함수와 CHAR_LENGTH() 함수를 조합하고, WHERE 절에 LIKE 조건을 추가하여 마지막 문자가 '?'인 레코드만 대상으로 지정합니다.
mysql> update DemoTable SET SubjectName = SUBSTRING(SubjectName, 1, CHAR_LENGTH(SubjectName) - 1) where SubjectName like '%?'; Query OK, 2 rows affected (0.25 sec) Rows matched : 2 Changed : 2 Warnings : 0
쿼리 실행 후 테이블 레코드를 다시 한번 확인해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+-------------+ | SubjectName | +-------------+ | MySQL | | MongoDB | | Java | | C | +-------------+ 4 rows in set (0.00 sec)
결과를 보면 'MongoDB?'와 'Java?'에서 마지막 물음표가 성공적으로 제거되어 'MongoDB'와 'Java'로 변경된 것을 확인할 수 있습니다.
쿼리 동작 원리
이 쿼리의 핵심은 다음과 같습니다.
CHAR_LENGTH(SubjectName)는 문자열의 전체 길이를 반환하고, 여기서 1을 빼면 마지막 문자를 제외한 길이가 됩니다. SUBSTRING(SubjectName, 1, CHAR_LENGTH(SubjectName) - 1)은 첫 번째 위치부터 해당 길이까지의 문자열을 추출합니다. WHERE SubjectName LIKE '%?' 조건으로 인해 마지막 문자가 물음표인 레코드만 업데이트되며, 나머지 레코드는 그대로 유지됩니다.
이 방법은 물음표 외에도 콤마(,), 마침표(.) 등 다른 특정 문자를 마지막에서 제거할 때도 동일하게 응용할 수 있습니다.