MySQL은 문자열을 행으로 분할

Migel Hewage Nimesha 2023년6월20일
  1. MySQL에서 문자열을 행으로 분할
  2. SUBSTRING_INDEX() 메서드를 사용하여 문자열을 행으로 분할
  3. 결론
MySQL은 문자열을 행으로 분할

MySQL은 테이블 열과 행에 데이터를 저장하고 사용자는 이러한 데이터를 정의, 제어, 조작 및 쿼리할 수 있습니다. MySQL은 우리에게 다양한 기능을 제공하며 우리가 가질 수 있는 한 가지 기능은 문자열을 행으로 분할하는 것입니다.

이 문서에서는 문자열을 행으로 분할하는 방법, 용도 및 MySQL에서 수행하는 방법에 대해 설명합니다.

MySQL에서 문자열을 행으로 분할

데이터베이스에서 데이터를 조작할 때 때때로 문자열과 상호 작용합니다. 예를 들어 테이블에는 고객의 전체 이름, 주소 및 일부 설명이 포함될 수 있습니다.

경우에 따라 이러한 데이터를 문자열로 추가하고 다양한 목적을 위해 데이터를 행으로 분할해야 할 수도 있습니다. 이 목표를 달성하기 위해 MySQL은 SUBSTRING_INDEX() 메서드를 제공합니다.

SUBSTRING_INDEX() 메서드를 사용하여 문자열을 행으로 분할

SUBSTRING_INDEX()는 문자열에서 하위 문자열을 파생시키기 위해 MySQL이 제공하는 기능입니다. 특정 구분 기호를 확인하므로 출력되기 전의 하위 문자열입니다.

구문은 다음과 같습니다.

SUBSTRING_INDEX(string, delimiter, number);

위 구문에는 세 개의 매개변수가 있습니다. 문자열은 하위 문자열을 파생시키기 위해 입력한 행을 나타내며 구분 기호는 함수가 검색할 값입니다.

구분 기호가 검색되는 횟수를 숫자라고 합니다. 숫자는 양수 또는 음수일 수 있습니다.

양수이면 문자열의 앞에서부터 구분 기호까지 남겨진 하위 문자열을 가져옵니다. 음수이면 구분 기호 바로 아래 부분 문자열을 가져오고 문자열의 뒤에서부터 구분 기호 검색을 시작합니다.

예를 들어 보겠습니다.

SELECT SUBSTRING_INDEX('England, America, Japan, China',',',2) AS newp;

위에 표시된 것처럼 쉼표로 구분된 4개 국가를 포함하는 문자열을 제공했습니다. 그런 다음 구분 기호로 쉼표가 통과되었고 숫자로 2를 지정했습니다.

결과를 보자.

출력:

MySQL 문자열을 행으로 분할 - 출력 1

보시다시피 숫자로 2를 지정했기 때문에 두 번째 쉼표에 하위 문자열이 남습니다. 숫자에 대해서는 음수로 다시 시도해 봅시다.

SELECT SUBSTRING_INDEX('England, America, Japan, China',',',-1) AS newp;

아래는 위 코드를 실행한 결과인데 보시는 바와 같이 숫자를 -1로 주었기 때문에 China를 출력으로 얻었고, 음수이므로 마지막 구분자를 찾아서 맞는 하위문자열을 출력했습니다. 그것에.

출력:

MySQL 문자열을 행으로 분할 - 출력 2

이제 이 방법을 사용하여 문자열을 행으로 분할하는 방법을 살펴보겠습니다. 아래 예를 참조하십시오.

DELIMITER //

-- Creating a procedure
CREATE procedure newProcedure()

BEGIN
-- Declaring a variable as myvar to store the string
DECLARE myvar varchar (300);

-- Assigning the string to the variable
SET myvar = 'China.Japan.USA';

-- Deriving the substrings
(SELECT SUBSTRING_INDEX(myvar, '.', 1) AS Countries)
UNION
(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(myvar, '.', 2),'.','-1') AS Countries)
UNION
(SELECT SUBSTRING_INDEX(myvar, '.', -1) AS Countries);
END //
DELIMITER ;

-- Calling the procedure
CALL newProcedure()

위의 코드에서 newProcedure라는 프로시저를 만든 다음 문자열을 저장할 변수를 선언했습니다. 문자열에는 마침표 기호가 포함되어 있으므로 구분 기호가 됩니다.

우리는 SUBSTING_INDEX 메서드를 4번 사용했으며(가운데 하위 문자열을 가져오기 위해 중간에 두 번) UNION을 사용하여 해당 하위 문자열을 단일 열에 포함했습니다. 마지막으로 프로시저를 호출했으며 출력은 다음과 같습니다.

출력:

MySQL 문자열을 행으로 분할 - 출력 3

문자열을 행으로 분할했지만 마침표 기호가 3개 이상인 경우 이 코드가 어려울 수 있습니다.

이 문제를 극복하기 위해 솔루션을 구축할 수 있습니다. 먼저 국가 이름을 포함하는 단일 열이 있는 테이블을 만들 수 있습니다.

전체 이름을 분할해야 하므로 추가하는 국가 이름에는 둘 이상의 이름이 있습니다. 다음과 같이 세 개의 국가 이름이 있는 테이블을 생성해 보겠습니다.

CREATE TABLE countries (countryName VARCHAR(100));
INSERT INTO countries VALUES
('United States America'),
('New Zeland'),
('United Kingdom');

이제 1, 2, 3을 데이터로 포함하는 numberList라는 또 다른 테이블을 생성해 보겠습니다.

CREATE TABLE numberList (indexing INT);
INSERT INTO numberList VALUES (1),(2),(3);

이 테이블의 목적은 분할할 하위 문자열의 최대 수를 설정하는 것입니다. 우리는 3개의 숫자를 추가했으며 코드가 실행될 때 줄 안에 4개의 하위 문자열이 있더라도 문자열을 최대 3개의 하위 문자열로 나눕니다.

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(countries.countryName, ' ', numberList.indexing), ' ', -1) countryName
FROM numberList
INNER JOIN countries
ON CHAR_LENGTH (countries.countryName) -CHAR_LENGTH(REPLACE(countries.countryName, ' ', '')) >= numberList.indexing - 1

위의 코드 청크에서는 SUBSTRING_INDEX 함수를 사용했고 그 안에는 국가 이름이 공백으로 구분되어 있으므로 검색할 구분 기호로 넣었습니다. 그런 다음 국가 이름에 3개 이상의 하위 문자열이 있는지 확인했습니다.

그런 다음 하위 문자열을 행으로 인쇄했습니다.

전체 코드:

-- Creating the table
CREATE TABLE countries (countryName VARCHAR(100));

-- Inserting values
INSERT INTO countries VALUES
('United States America'),
('New Zeland'),
('United Kingdom');

-- Create a table that contains the numbers
CREATE TABLE numberList (indexing INT);
INSERT INTO numberList VALUES (1),(2),(3);

-- Deriving the substrings
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(countries.countryName, ' ', numberList.indexing), ' ', -1) countryName
FROM numberList
INNER JOIN countries
ON CHAR_LENGTH (countries.countryName) -CHAR_LENGTH(REPLACE(countries.countryName, ' ', '')) >= numberList.indexing - 1

아래는 코드를 실행한 후 얻은 결과입니다.

출력:

MySQL 문자열을 행으로 분할 - 출력 4

보시다시피 국가 이름은 예상대로 하위 문자열로 나뉩니다.

결론

이 기사를 통해 MySQL에 대한 간략한 소개를 했습니다. 그런 다음 문자열을 행으로 분할해야 하는 이유와 MySQL에서 수행하는 방법을 배웠습니다.

목표를 달성하기 위해 MySQL은 SUBSTRING_INDEX 메서드를 제공했으며 이를 사용하여 작업을 완료하는 방법을 살펴보았습니다.

STRING_SPLIT 함수와 같은 이 작업을 수행하는 다른 방법이 있지만 이 기사에서 논의한 기술은 MySQL에서 가장 좋은 방법입니다.

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

관련 문장 - MySQL String

관련 문장 - MySQL Row