#mysql #sql #database
#mysql #sql #База данных
Вопрос:
Итак, я получил длинную строку с данными о продукте, и мне нужен только код EAN.
строка данных выглядит следующим образом:
{"ArtNr UP":"782001","Omschrijving":"1-2DRY OKSELPADS LARGE WIT","Inhoud":" 20ST","Bruto Inkoop":"2,36","Advies":"4,09","Discount":"4,09","EAN-code CE":"8717775824442","Merkr":"1-2DRYr"}
Мне нужно только число, которое идет после EAN-code CE»:», я думал об использовании SUBSTRING, но это не сработает, потому что все записи имеют разную длину.
У кого-нибудь есть идея? заранее спасибо!
Комментарии:
1. Пожалуйста, пометьте свой вопрос базой данных, которую вы используете: mysq, oracle, postgresql …?
Ответ №1:
Не беспокоясь о том, какой движок SQL вы используете, вот алгоритм для его обработки:
- Обрезать строку фигурными скобками (
{
и}
) - Разделить строку по
,
разделителю - Найдите ту из разделенной таблицы, которая содержит «EAN-Code CE»
- Разделите эту часть (если она существует) с помощью
:
разделителя - Получить вторую часть (если она существует) и обрезать с
"
помощью .
В результате вы должны получить значение кода EAN.
Ответ №2:
Поскольку номер местоположения EAN имеет фиксированную длину в 13 цифр, нам просто нужен SQL, чтобы найти место, где начинается EAN, а затем отобразить соответствующие данные
Предполагая, что мы используем Mysql, таблица базы данных — «test3», а поле данных, в котором хранится строка данных, — «замечание». В этом случае следующий SQL выполнит эту работу:
select
SUBSTRING(remark, locate('EAN-code CE', remark) 14, 13) from test3;
примечание: если вы используете MSSQL, пожалуйста, используйте «CHARINDEX» вместо «locate»
Ответ №3:
Эта строка, подлежащая анализу, является JSON, поэтому в базах данных SQL Server мы можем использовать функцию таблицы OpenJSON
Вот пример кода для переменной string
declare @str nvarchar(max) = '{"ArtNr UP":"782001","Omschrijving":"1-2DRY OKSELPADS LARGE WIT","Inhoud":" 20ST","Bruto Inkoop":"2,36","Advies":"4,09","Discount":"4,09","EAN-code CE":"8717775824442","Merkr":"1-2DRYr"}'
select * from openJSON(@str) where "key" = 'EAN-code CE'
Если вы сохраните эту строку JSON в таблице базы данных, то код можно использовать следующим образом
select *
from TableName
cross apply openJSON(str) with (
"EAN-code CE" varchar(20)
)
В этом случае str — это столбец, содержащий данные JSON в TableName table
Вывод выглядит следующим образом
Вы найдете образцы OpenJSON при разборе JSON с использованием SQL OpenJSON, которые будут полезны, если вам требуется более одного столбца в списке возвращаемых данных
Ответ №4:
Если вы используете SQL Server 2016 (и далее), это, похоже, работает :
CREATE TABLE TEST(
DUMMY NVARCHAR(MAX));
INSERT INTO TEST(DUMMY) VALUES('{"ArtNr UP":"782001","Omschrijving":"1-2DRY OKSELPADS LARGE WIT","Inhoud":" 20ST","Bruto Inkoop":"2,36","Advies":"4,09","Discount":"4,09","EAN-code CE":"8717775824442","Merkr":"1-2DRYr"}');
SELECT JSON_VALUE(DUMMY,'$."EAN-code CE"') as EANCode
FROM TEST
Редактировать :
Поскольку вы используете MySQL, эквивалентом, по-видимому, является оператор ->> :
CREATE TABLE `JSON_TABLE` (
`JSON` TEXT DEFAULT NULL
);
INSERT INTO `JSON_TABLE` VALUES ('{"ArtNr UP":"782001","Omschrijving":"1-2DRY OKSELPADS LARGE WIT","Inhoud":" 20ST","Bruto Inkoop":"2,36","Advies":"4,09","Discount":"4,09","EAN-code CE":"8717775824442","Merk\r":"1-2DRY\r"}');
SELECT JSON->>'$."EAN-code CE"' FROM `JSON_TABLE`;