Разбор текста в формате JSON с использованием Oracle SQL

У меня есть требование проанализировать текстовое поле XML в Oracle, чтобы удалить определенные символы / строки из данных.

I / p: -

{{Value : "Actual: 15' 0" X 7' 0"  Opening:  15' 0" X 7' 0"", Description : "Size", PrintCode : "", PrintSequence : 80}, 
{Value : "Section Color: Desert Tan-,Trim Board Color: White", Description : "Color", PrintCode : "", PrintSequence : 90}, 
{Value : "Top Section: Standard-,Board Width: Standard", Description : "Design Modifications", PrintCode : "", PrintSequence : 100},
{Value : "Size: 2"-,Mount: Bracket  Mount-,Radius: 15"", Description : "Track", PrintCode : "", PrintSequence : 110},
{Value : "Springs: Standard-,Drums: Standard-,Shaft: 16 Gauge Tube", Description : "Counterbalance", PrintCode : "", PrintSequence : 120},
{Value : "Hinge: Standard-,Struts: Standard", Description : "Hardware", PrintCode : "", PrintSequence : 130}}

Мне нужен O / P вроде -

"Actual: 15' 0" X 7' 0"  Opening:  15' 0" X 7' 0"", Description : "Size",
"Section Color: Desert Tan-,Trim Board Color: White", Description : "Color",
"Top Section: Standard-,Board Width: Standard", Description : "Design Modifications", 
"Size: 2"-,Mount: Bracket  Mount-,Radius: 15"", Description : "Track",
"Springs: Standard-,Drums: Standard-,Shaft: 16 Gauge Tube", Description : "Counterbalance",
"Hinge: Standard-,Struts: Standard", Description : "Hardware"

1) Хочу снять все скобки.
2) Я хотел бы удалить весь код, начинающийся с PrintCode, до конца скобки. 3) Следует заменить строку value : нулевой.

Любая помощь будет принята с благодарностью. Спасибо. :)

Используйте regexp_replace, если это поле хранится как varchar

Fact 12.03.2018 05:10

Какая версия Oracle? Это столбец в вашей таблице? Что это за тип данных? а что вы пробовали до сих пор?

Kaushik Nayak 12.03.2018 06:43

Этот текст не имеет ничего общего с XML, он больше похож на JSON

Wernfried Domscheit 12.03.2018 08:07

Веренфрид прав, этот ввод не является даже удаленно действительным XML (он похож на JSON, но также не является действительным JSON)

a_horse_with_no_name 12.03.2018 08:12

Привет, @Kaushik Nayak - Версия Oracle - 12C, а тип данных - Varchar. Я попытался записать несколько обновлений в этот столбец с помощью функции REGEXP_replace и пока не добился желаемого результата.

decorooney 12.03.2018 12:58

Итак, есть ли в вашем тексте новая строка после} или просто пробел?

Kaushik Nayak 12.03.2018 13:44

@Kaushik Nayak Просто космос, Кошик

decorooney 12.03.2018 14:51
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
7
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Попробуй это.

SQL Fiddle

Шаблон соответствует фигурным скобкам - {}или жеvalue :или жеPrintCode until the bracket end и заменяет его пробелами. Дополнительные trims необходимы для удаления , и места. .+? предназначен для нежадного совпадения, которое ищет до первого появления следующего символа (в данном случае }).

Надеюсь, что в коде нет новых строк, как вы сказали в комментариях. В противном случае результаты могли бы быть другими, и для этого можно было бы использовать опцию сопоставления с образцом n.

Запрос 1:

WITH t ( input ) AS
  (SELECT '{{Value : "Actual: 15'' 0" X 7'' 0"  Opening:  15'' 0" X 7'' 0"", Description : "Size", PrintCode : "", PrintSequence : 80}, {Value : "Section Color: Desert Tan-,Trim Board Color: White", Description : "Color", PrintCode : "", PrintSequence : 90}, {Value : "Top Section: Standard-,Board Width: Standard", Description : "Design Modifications", PrintCode : "", PrintSequence : 100},{Value : "Size: 2"-,Mount: Bracket  Mount-,Radius: 15"", Description : "Track", PrintCode : "", PrintSequence : 110},{Value : "Springs: Standard-,Drums: Standard-,Shaft: 16 Gauge Tube", Description : "Counterbalance", PrintCode : "", PrintSequence : 120},{Value : "Hinge: Standard-,Struts: Standard", Description : "Hardware", PrintCode : "", PrintSequence : 130}}'
  FROM dual
  )
SELECT RTRIM ( TRIM ( REGEXP_REPLACE (input,'({|}|Value +:|PrintCode.+?}(,|}))', '')) ,',') AS output
FROM t

Полученные результаты:

"Actual: 15' 0" X 7' 0" Opening: 15' 0" X 7' 0"", Description : "Size", "Section Color: Desert Tan-,Trim Board Color: White", Description : "Color", "Top Section: Standard-,Board Width: Standard", Description : "Design Modifications", "Size: 2"-,Mount: Bracket Mount-,Radius: 15"", Description : "Track", "Springs: Standard-,Drums: Standard-,Shaft: 16 Gauge Tube", Description : "Counterbalance", "Hinge: Standard-,Struts: Standard", Description : "Hardware"

Огромное спасибо. Получилось действительно хорошо.

decorooney 12.03.2018 22:20

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