2014-10-22 3 views
0

나는 테이블과 일부 데이터가로 하나의 열을 분할 : 내가 3 열을 돌려 SELECT 쿼리를 실행하고 싶은정규 표현식을 사용하여 여러 열

-- Table 
CREATE TABLE IF NOT EXISTS `myTable` (
    `myColumn` varchar(32) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- Data 
INSERT INTO `myTable` (`myColumn`) VALUES 
('AAA BBB CCC'), 
('AA BB CCCC'), 
('BBB CC AAAA'), 
('C AAA BBB'), 
('CCC AA BBB'); 

합니다.

열은 A, BC으로 지정해야합니다.

결과가 같은 것을 보일 것입니다 :

^([A]+) ([B]+) ([C]+)$ 
^([B]+) ([C]+) ([A]+)$ 
^([C]+) ([A]+) ([B]+)$ 

는 이러한 정규 표현식을 사용할 수 있습니다 : 그들 모두를 사용하여 나는 세 가지 정규 표현식하는이

+------+-----+------+ 
| A | B | C | 
+------+-----+------+ 
| AAA | BBB | CCC | 
| AA | BB | CCCC | 
| AAAA | BBB | CC | 
| AAA | BBB | C | 
| AA | BBB | CCC | 
+------+-----+------+ 

을, 모든 데이터를 일치시킬 수 있습니다 그런 결과를 얻으려면?

그렇다면 문제의 하위 집합에 대해서만 예제를 제공합니다.

답변

1

MySQL의 정규식을 사용하여 수행 할 수 없습니다. 불행하게도 MySQL은 정규 표현식을 부울 조건 (특히 where 절에서)으로 만 지원하지만 문자열의 내용을 추출하거나 변경하지는 않습니다.

그러나 substring_index을 사용하여 MySQL 쿼리에서 설명한 내용을 완전히 달성 할 수 있습니다. 다음은 시나리오에 대한 사용 예입니다.

SELECT substring_index(substring_index(myColumn, ' ', 1), ' ', -1) AS `A`, 
     substring_index(substring_index(myColumn, ' ', 2), ' ', -1) AS `B`, 
     substring_index(    myColumn   , ' ', -1) AS `C` 
    FROM ... 

또는 정규식을 절대적으로 사용해야하는 경우 MySQL 출력을 일부 정규식 엔진으로 파이프 할 수 있습니다. 이 전략에 대한 추가 정보가 필요한지 저에게 물어보십시오.

관련 문제