MySql - выберите несколько символов после определенного слова и добавьте его в другой столбец - PullRequest
0 голосов
/ 18 июня 2019

У меня есть таблица, которая включает в себя 2 столбца: заголовок и параметр, значения похожи на следующие:

-титр: Teaching

-параметры:

{"ufield926":"34","ufield927":"Sud","ufield928":"Ara","ufield929":"Mecca",
 "ufield930":"1\/1\/1983","ufield933":"011","ufield934":"Mub",
 "ufield943":"SU\/HI\/14","ufield944":"Average","ufield946":"Female"}

Я хочу извлечь код после "ufield943":, который является SU\/HI\/14, и объединить его со значением в столбце заголовка, чтобы оно было похоже на следующее:

Teaching (SU\/HI\/14)

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Значение в params - JSON, поэтому лучшим решением может стать поддержка MySQL JSON .

Я не знаком с поддержкой MySQL JSON, если это не работает для вас, я бы посмотрел на REGEXP_SUBSTR и REGEXP_REPLACE в MySQL:

SELECT
    title
    REGEXP_REPLACE(
        REGEXP_SUBSTR(params, '"ufield943"[[:space:]]*:[[:space:]]*"([^"\\]|\\.)+'),
        '^"ufield943"[[:space:]]*:[[:space:]]*"', '')
FROM MyTable

Регулярное выражение находит значение независимо от того, где оно находится в json, и учитывает пробелы в столбце (например, "ufield943" : "SU\/HI\/14").

0 голосов
/ 18 июня 2019

Попробуйте этот запрос:

select *,
       substring(
         params,
         locate('ufield943', params) + 12,
         locate('ufield944', params) - locate('ufield943', params) - 15
       )
from tbl;

Но я предположил, что ufield944 происходит сразу после ufield943.

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...