2011-09-28 4 views
0

기사 참조가있는 문자열을 포함하는 열을 MySQL의 여러 열로 분할하고 싶습니다. 예를 들어, 다음 문자열여러 열에서 문자열의 요소 나누기

North American Birds 53(1) 1999: 27-29 

은 'North American Birds', 53,1, 1999, 27-19로 나뉩니다. substring_index를 사용하여이 작업을 수행 할 수 있다는 것을 알고 있지만 볼륨 (53)에서 저널 이름 (북미 새)을 분할하는 데는 작동하지 않습니다. 어떻게 내가 그걸 할 수 있을지 아는가?

답변

1

숫자는 구분 기호로 사용할 수 있습니다.

느린 못생긴 코드,하지만 난 그게

SELECT 
    s.id 
    ,SUBSTRING(s.title,1, PosOfFirstNumber-1) as booktitle 
    ,SUBSTRING(s.title, PosOfFirstNumber) as Remainder 
FROM 
    (SELECT 
     id 
     ,title 
     ,LEAST(
      IFNULL(NULLIF(LOCATE('1',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('2',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('3',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('4',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('5',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('6',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('7',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('8',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('9',title),0),999) 
      ,IFNULL(NULLIF(LOCATE('0',title),0),999) 
     )) as PosOfFirstNumber 
    FROM table1) s 
+0

당신이 말했듯이, 이것은 예쁘지는 않지만 작동합니다! 감사! – Guillaume

0

첫 번째 질문은 데이터베이스에 삽입 한 후 문자열을 다른 열로 나눌 계획입니까? 삽입하기 전에 분리하는 것이 좋지만이 제안은 너무 늦을 수 있습니다.

삽입하기 전에 분할하는 경우 정규식을 사용하여 데이터를 구문 분석 한 다음 적절한 SQL INSERT를 작성해야합니다. 여기에 Java regular expressions example이 있습니다.

데이터가 이미 데이터베이스에있는 경우 데이터를 분할하는 경우 데이터 문자열과 관련된 패턴 일치로 SQL을 만들어야합니다. 여기에 IBM article describing different SQL code strategies이 있습니다.

+0

데이터는 데이터베이스에 이미 작동 생각, 그래서 두 번째 옵션으로 볼 것이다. 이 링크는 꽤 흥미로운 것 같습니다. 감사. – Guillaume

관련 문제