Разбить строку шаблона на столбцы в запросе выбора

0

У меня есть person таблица с ниже структурой.

CREATE TABLE person(id integer, details LONGTEXT);
INSERT INTO person(id,details) 
VALUES
(1, "name:Tahir,age:30,sex:male"),
(2, "name:Tina,sex:female,status:1");

Проблема: у меня есть некоторые ограничения на конец db, не могу добавить новые таблицы/столбцы, поэтому им нужно импровизировать с доступным столбцом, который детализирует LONGTEXT. Итак, у меня нет другого пути, кроме как найти обходной путь.

Итак, я хочу разделить колонку детали запятой и показать результаты в столбцах разницы. Например, в этом примере результатом будет идентификатор, имя, возраст, пол, статус

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

SELECT id,
if(person.details like '%name:%',cast(substring_index(substring_index(person.details,'name:',-1),',',1) as unsigned),null) as 'name',
if(person.details like '%age:%',cast(substring_index(substring_index(person.details,'age:',-1),',',1) as unsigned),null) as 'age',
if(person.details like '%sex:%',cast(substring_index(substring_index(person.details,'sex:',-1),',',1) as unsigned),null) as 'sex',
if(person.details like '%status:%',cast(substring_index(substring_index(person.details,'status:',-1),',',1) as unsigned),null) as 'status'
FROM person

выше запроса берет данные правильно для возраста, но имя и пол получает 0. Не могли бы вы выяснить, что я здесь отсутствует?

https://www.db-fiddle.com/f/cqyqb7Vhvs7kKYifFywmkV/6

Теги:
mariadb

1 ответ

1
Лучший ответ

Вы бросаете видимые строки как unsigned (целые числа). Не нужно бросать:

SELECT
  id,
  if(person.details like '%name:%',substring_index(substring_index(person.details,'name:',-1),',',1),null) as 'name',
  if(person.details like '%age:%',cast(substring_index(substring_index(person.details,'age:',-1),',',1) as unsigned),null) as 'age',
  if(person.details like '%sex:%',substring_index(substring_index(person.details,'sex:',-1),',',1),null) as 'sex'
FROM person
  • 0
    Большое спасибо. !

Ещё вопросы

Сообщество Overcoder
Наверх
Меню