ProgramingTip

Mysql이 열을 분할 할 수 있습니까?

bestdevel 2020. 12. 30. 23:52
반응형

Mysql이 열을 분할 할 수 있습니까?


쉼표로 구분 된 데이터가있는 열이 있습니다.

1,2,3
3,2,1
4,5,6
5,5,5

CSV는 각 값을 식별 적으로 쿼리하는 검색을 실행합니다.

0<first<5   and  1<second<3  and  2<third<4 

모든 쿼리를 반환하고 직접 분할하고 직접 수있는 것을 알았습니다. mysql이 처리 작업을 수행하도록 이렇게하는 방법이 있는지 궁금합니다. 감사합니다!


사용하다

substring_index(`column`,',',1) ==> first value
substring_index(substring_index(`column`,',',-2),',',1)=> second value
substring_index(substring_index(`column`,',',-1),',',1)=> third value

당신의 절에서.

SELECT * FROM `table`
WHERE 
substring_index(`column`,',',1)<0 
AND
substring_index(`column`,',',1)>5

작동하는 것입니다.

substring_index ( substring_index ( context,',',1 ), ',', -1) ) 
substring_index ( substring_index ( context,',',2 ), ',', -1) ) 
substring_index ( substring_index ( context,',',3 ), ',', -1) ) 
substring_index ( substring_index ( context,',',4 ), ',', -1) )

1st 값, 2nd, 3rd 등을 의미합니다.

설명 :

내부 substring_index는 쉼표로 구분 된 처음 n 개의 값을 반환합니다. 따라서 원래는 "34,7,23,89"이면 "34,7,23"을 substring_index( context,',', 3)반환합니다.
외부는 substring_index내부에 의해 반환 된 값을 사용 substring_index하고는 -1마지막 값을 값 수 있습니다. 그러므로 "34,7,23"에서 "23"을 얻습니다. 를 지정
하는 대신 마지막 두 값을 사용이 표시됩니다.-1-2

예 :

select * from MyTable where substring_index(substring_index(prices,',',1),',',-1)=3382;

다음 prices은의 열 이름입니다 MyTable.


일반적으로 substring_index 는 원하는 작업을 수행합니다.

mysql> select substring_index("foo@gmail.com","@",-1);
+-----------------------------------------+
| substring_index("foo@gmail.com","@",-1) |
+-----------------------------------------+
| gmail.com                               |
+-----------------------------------------+
1 row in set (0.00 sec)

MySQL REGEXP 또는 LIKE를 사용하여 원하는 것을 얻을 수 있습니다.

패턴 매칭에 대한 MySQL 문서 보기


이에 대한 부록으로 다음과 같은 형식의 호스트가 있습니다. 일부 단어 303

어깨의 꼬리에서 숫자 부분을 분리하고 싶습니다. 이 가능한 가능성을 제안합니다.

http://lists.mysql.com/mysql/222421

그러나 문제는 정규 일치의 시작 안전가 아니라 "예, 일치합니다"라는 대답 만 대답 수 있습니다.


다음은 관련 질문에 게시 한 또 다른 변형입니다. REGEX당신이 범위를 벗어나면 체크 그래서 테이블에있을 것, 유용 할 수 있습니다.

SET @Array = 'one,two,three,four';
SET @ArrayIndex = 2;
SELECT CASE 
    WHEN @Array REGEXP CONCAT('((,).*){',@ArrayIndex,'}') 
    THEN SUBSTRING_INDEX(SUBSTRING_INDEX(@Array,',',@ArrayIndex+1),',',-1) 
    ELSE NULL
END AS Result;
  • SUBSTRING_INDEX(string, delim, n) 처음 n을 반환합니다.
  • SUBSTRING_INDEX(string, delim, -1) 마지막 만 반환
  • REGEXP '((delim).*){n}' n 개의 구분 기호가 있음을 확인합니다 (즉, 경계에 있음).

작동 중입니다 ..

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(col,'1', 1), '2', 1), '3', 1), '4', 1), '5', 1), '6', 1)
, '7', 1), '8', 1), '9', 1), '0', 1) as new_col  
FROM table_name group by new_col; 

참조 URL : https://stackoverflow.com/questions/1096679/can-mysql-split-a-column

반응형