#mysql
#mysql
Вопрос:
Я хотел бы разделить столбец, содержащий строку со ссылками на статьи, на несколько столбцов в MySQL. Например, следующая строка
North American Birds 53(1) 1999: 27-29
будет разделен на «Североамериканские птицы’, 53, 1, 1999, 27-19. Я знаю, что могу сделать кое-что из этого с помощью substring_index , но это не сработает для разделения названия журнала (North American Birds) из тома (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
Ответ №2:
Первый вопрос, который нужно задать: планируете ли вы разделить вашу строку на разные столбцы до ИЛИ после ее вставки в вашу базу данных? Я предлагаю разделить перед вставкой, но это предложение может быть слишком запоздалым.
При разделении ПЕРЕД вставкой вам следует использовать регулярные выражения для анализа ваших данных, а затем создать соответствующую вставку SQL. Вот пример регулярных выражений Java.
При разделении данных после того, как они уже находятся в вашей базе данных, вам нужно будет создать SQL с шаблоном, соответствующим строке ваших данных. Вот статья IBM, описывающая различные стратегии кода SQL.
Комментарии:
1. Данные уже находятся в базе данных, поэтому я рассмотрю второй вариант. Эта ссылка кажется довольно интересной. Спасибо.