Разделить одну строку запятыми на столбцы

Например, у меня есть такая таблица:

| Block                       |
| abcdefgh,12kjkjkj,231wewoxyz|

Как я могу преобразовать его в:

| Block1   | Block2   | Block3     |
| abcdefgh | 12kjkjkj | 231wewoxyz |

Примечание: - Каждый «Блок» имеет максимум 8 запятых (и, следовательно, может быть разделен на 9 меньших блоков). Количество запятых варьируется; в некоторых есть 8 запятых, в некоторых - 4, в некоторых - 7 и т. д. Каждый меньший блок будет занимать столбец.

Кстати, я использую Presto.

Спасибо!

Какую базу данных вы используете?

Alex Howansky 13.09.2018 19:03

Я использую Presto @AlexHowansky

Tai Ngo 13.09.2018 19:06

Presto имеет встроенную функцию разделения: prestodb.io/docs/current/functions/string.html

Alex Howansky 13.09.2018 19:08

@AlexHowansky спасибо; это помогает мне с первым шагом. На втором этапе я пытаюсь разбить строки на разные столбцы.

Tai Ngo 13.09.2018 19:13

Какая конечная цель? С чего вы начинаете и чем хотели бы закончить?

Shawn 13.09.2018 19:19

И если у вас есть некоторые списки с 4 запятыми, а другие с 8, как вы решаете, в какие столбцы они входят?

Shawn 13.09.2018 19:20

Это похоже на теги. Например, товар (Nike Shoes) имеет такие теги, как «бег», «марафон», «nikeair». В базе данных они хранятся как одно единственное значение, «бег, марафон, nikeair», поэтому, когда я запрашиваю, я хочу иметь возможность хранить в одной строке бег | марафон | Найкэйр. Каждое значение будет иметь 9 столбцов. Некоторые из них будут иметь 9 столбцов со значением, некоторые - с пустыми столбцами. @Shawn

Tai Ngo 13.09.2018 19:26

Хранение нескольких значений с разделителями (денормализованных) в одном столбце - очень плохой способ спроектировать то, о чем вы говорите. Вы просто навлекаете на себя массу неприятностей в будущем. Я настоятельно рекомендую вам пересмотреть это дизайнерское решение.

Shawn 13.09.2018 19:58

@Shawn, я не занимаюсь проектированием базы данных. В существующей базе данных есть столбец, в котором хранится несколько значений с разделителями. Я просто пытаюсь извлечь внутри нужную информацию.

Tai Ngo 13.09.2018 20:01

Вы хотите превратить строку с разделителями-запятыми в ряд столбцов? Как вы планируете использовать эти столбцы? Даже если вы не планируете создавать новую таблицу для этих значений, вероятно, было бы проще использовать эти столбцы в SQL, если бы вы отключили эти данные и использовали их как один столбец и получили доступ к данным в строке, представляющей этот столбец. Затем, если вы хотите узнать все элементы, помеченные как «бегущие», вам не нужно будет смотреть на каждый тип «обуви» и фильтровать через Column1 - Column8, чтобы узнать, «бегают» ли какие-либо из них.

Shawn 13.09.2018 20:36
3
10
8 403
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне кажется, вы бы просто использовали функцию split_part для создания своих столбцов, например:

SELECT
    split_part(Block, ',', 1) AS Block1,
    split_part(Block, ',', 2) AS Block2,
    split_part(Block, ',', 3) AS Block3,
    split_part(Block, ',', 4) AS Block4,
    split_part(Block, ',', 5) AS Block5,
    split_part(Block, ',', 6) AS Block6,
    split_part(Block, ',', 7) AS Block7,
    split_part(Block, ',', 8) AS Block8,
    split_part(Block, ',', 9) AS Block9
FROM
    your_table

Другие вопросы по теме