У меня есть столбец JSON в таблице. то есть стол
column
---------------
[2,5,7,21,1,54,12]
Теперь его возвращаемый массив для приведенного ниже запроса.
select column from table
Выход => [2,5,7,21,1,54,12]
То, что я хочу, это вывод как «2,5,7,21,1,54,12».
Любое предложение?
Вы можете использовать вложенные функции replace(), чтобы удалить [ и ], или вы можете использовать комбинацию SUBSTRING() и LENGTH(), см. демо, должно быть больше MySQL строковые функции, которые могут делать то же самое.
@Cid это для отчетности. Мне нужно получить его как строковый формат. Принимая во внимание, что когда данные вставляются, они должны быть в формате массива JSON.
@RaymondNijland: Да, это последний вариант, который я могу придумать. Нет функции JSON для объединения элементов массива?
Формат массива «Мне нужно получить его в формате stringify. Принимая во внимание, что когда данные вставляются, они должны быть в формате массива JSON» JSON всегда с [], а также звучит очень противоречиво с «Я хочу вывести как «2,5,7,21,1,54,12».»






$array = (result from column);
echo implode(",", $array); // separates array variables with a comma ",".
больше здесь:
https://www.php.net/manual/en/function.implode.php
я не заметил тег PHP в этом вопросе?
Я прокручивал теги php, возможно, я нажал «связанные» или что-то в этом роде. Приношу извинения за неудобства
Нет.. это не связано с PHP.. Но спасибо @Andrew за ответ. У меня есть бэкэнд как nodeJS, хотя я не хочу перебирать и изменять данные из бэкэнда. Скорее я хочу изменить его из SQL, если это возможно, а также не делать запрос дорогим.
Вот пример запроса массива JSON:
select data from t;
+--------------------------+
| data |
+--------------------------+
| [2, 5, 7, 21, 1, 54, 12] |
+--------------------------+
Вы можете превратить массив JSON в строку, используя JSON_UNQUOTE(). Но он форматирует строку с квадратными скобками и пробелами:
select json_unquote(data) as stringified from t;
+--------------------------+
| stringified |
+--------------------------+
| [2, 5, 7, 21, 1, 54, 12] |
+--------------------------+
Вы можете удалить эти нежелательные символы с помощью ЗАМЕНЯТЬ():
select replace(replace(replace(json_unquote(data), ' ', ''), '[', ''), ']', '') as stringified from t;
+------------------+
| stringified |
+------------------+
| 2,5,7,21,1,54,12 |
+------------------+
В MySQL 8.0 вы можете заменить символы за один вызов REGEXP_REPLACE():
select regexp_replace(json_unquote(data), '[\\[\\] ]', '') as stringified from t;
+------------------+
| stringified |
+------------------+
| 2,5,7,21,1,54,12 |
+------------------+
Элегантное решение — использовать возможности JSON_TABLE() и MySQL GROUP_CONCAT().
С таким образцом данных:
+--------+--------------------------------------------------------------------+
| user | emails (JSON) |
+--------+--------------------------------------------------------------------+
| user-1 | ["[email protected]", "[email protected]", "[email protected]"] |
| user-2 | ["[email protected]"] |
| user-3 | ["[email protected]", "[email protected]"] |
+--------+--------------------------------------------------------------------+
Если мы хотим вывести:
+--------+----------------------------------------------------------------+
| user | emails (TEXT) |
+--------+----------------------------------------------------------------+
| user-1 | [email protected] // [email protected] // [email protected] |
| user-2 | [email protected] |
| user-3 | [email protected] // [email protected]" |
+--------+----------------------------------------------------------------+
Мы можем сделать :
WITH data_sample (user, emails) AS (
-- Fake data build to test query
VALUES
ROW ('user-1', JSON_ARRAY('[email protected]', '[email protected]', '[email protected]')),
ROW ('user-2', JSON_ARRAY('[email protected]')),
ROW ('user-3', JSON_ARRAY('[email protected]', '[email protected]'))
)
SELECT ALL user, GROUP_CONCAT(email SEPARATOR ' // ') AS emails
FROM data_sample
CROSS JOIN JSON_TABLE(emails, '$[*]' COLUMNS (email TINYTEXT PATH '$')) AS _
GROUP BY user;
Нормализуйте свою базу данных. Какой смысл хранить такие сериализованные данные?