У меня есть требование проанализировать текстовое поле 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 : нулевой.
Любая помощь будет принята с благодарностью. Спасибо. :)
Какая версия Oracle? Это столбец в вашей таблице? Что это за тип данных? а что вы пробовали до сих пор?
Этот текст не имеет ничего общего с XML, он больше похож на JSON
Веренфрид прав, этот ввод не является даже удаленно действительным XML (он похож на JSON, но также не является действительным JSON)
Привет, @Kaushik Nayak - Версия Oracle - 12C, а тип данных - Varchar. Я попытался записать несколько обновлений в этот столбец с помощью функции REGEXP_replace и пока не добился желаемого результата.
Итак, есть ли в вашем тексте новая строка после} или просто пробел?
@Kaushik Nayak Просто космос, Кошик


Попробуй это.
Шаблон соответствует фигурным скобкам - {}или же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"
Огромное спасибо. Получилось действительно хорошо.
Используйте regexp_replace, если это поле хранится как varchar