2012-02-10 1 views
1

정규식 구분 기호를 사용하여 MySQL에서 문자열을 분할하고 싶습니다. 이것이 할 수있는 방법이 있습니까?정규식 구분 기호를 사용하여 MySQL에서 필드 값 나누기?

나는 간단한 분할 문자열 기능을 구현하는 방법을 설명하는이 블로그 게시물을 발견 : mysql split string function

그러나, 나는 두 개의 다른 문자로 내 문자열을 분할해야을, 그래서 난이 정규식을 사용하고자하는 것입니다 : [-, ]를 눌러 문자열을 분리하십시오. 여기

는 내가 가지고있는 테이블과 내가 달성하고자하는의 예입니다

| id | range | 
|----|-------| 
| 1 | 2,3,5 | 
| 2 | 1-4 | 
| 3 | 2  | 

내가 뭘 원하는 것은 각 "범위"-field의 최소 및 최대 값을 찾는 것입니다. 그래서, 내가 좀하고 싶습니다 : 어떤 힌트가 많이 주시면 감사하겠습니다 2

:

행 1 : 2, 5
행 2 : 3 1 4
행!

+0

당신이하고 싶은 것을 보여줄 수 있습니까? – Boris

+0

좋아요, 제가 예제를 추가했습니다 - 이걸로 내가 뭘하고 싶은지 상세하게 보여줍니다. – Lixus

+0

나는 하나의 테이블에 각 범위를 저장하는 것이 좋겠다. 하나의 열에 여러 데이터를 저장하는 것은 좋은 생각이 아니다. 그러나 당신의 사건에 대해 생각하게하십시오. – Boris

답변

2

테이블 이름의 이름이 data이고 range의 값이 최소값에서 최대 값까지 정렬되어 있다고 가정 할 때, 괜찮습니까?

SELECT id, 
(0 + data.range) AS min, 
GREATEST(
    0 + SUBSTRING_INDEX(data.range, ',', -1), 
    0 + SUBSTRING_INDEX(data.range, '-', -1) 
) AS max 
FROM `data` 

그러나 Boris가 제안한 범위에 대해 새 테이블을 만드는 방법에 대해 생각해보십시오. 가능하다면 더 깨끗하게 정리할 수 있습니다.

+0

대단히 고맙습니다. 나는 그것을 완전히 이해하지는 않지만. GREATEST를 사용하여 SUBSTRING_INDEX 함수에서 얻은 두 결과 중 하나를 선택하는 이유를 설명해 주시겠습니까? – Lixus

+1

최소의 경우 GREATEST를 사용하는 것은 쓸모가 없습니다. 쿼리를 업데이트 했으므로 '+ 0'을 사용하여 '범위'를 구문 분석기로 사용해야합니다. – adrien54

관련 문제