MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как EXTRACTVALUE() работи в MariaDB

В MariaDB, EXTRACTVALUE() е вградена низова функция, която връща CDATA от XML фрагмент.

Начинът, по който работи е, че приема два аргумента на низ:фрагмент от XML маркиране и XPath израз (т.е. локатор). EXTRACTVALUE() след това връща CDATA (т.е. текста) на първия текстов възел, който е дъщерно на елемента или елементите, съответстващи на израза XPath.

Синтаксис

Синтаксисът е така:

EXTRACTVALUE(xml_frag, xpath_expr) 

Където xml_frag е XML фрагментът и xpath_expr е XPath изразът за съвпадение.

Пример

Ето един основен пример:

SELECT EXTRACTVALUE('<type>Cat</type>', '/type') AS "Result"; 

Резултат:

<пред>+--------+| Резултат |+--------+| Котка |+--------+

В този случай XPath е /type , и така връща CDATA (текст) от type елемент.

Ето още един:

SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user') AS "Result"; 

Резултат:

<пред>+--------+| Резултат |+--------+| Омир |+--------+

В този случай XPath е /user , и така EXTRACTVALUE() връща CDATA от user елемент.

Забележете, че не върна iq елемент или неговия текст. Това може да се очаква, защото EXTRACTVALUE() връща само CDATA. Той не връща никакви дъщерни елементи или текст, който може да съдържа.

Използване на израза text()

Това е еквивалентно на получаване на съвпадение чрез добавяне на изричния text() израз:

SELECT EXTRACTVALUE('<type>Cat</type>', '/type/text()') AS "Result"; 

Резултат:

<пред>+--------+| Резултат |+--------+| Котка |+--------+

Вложени елементи

Ето пример за получаване на CDATA от вложен елемент:

SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user/iq') AS "Result"; 

Резултат:

<пред>+--------+| Резултат |+--------+| Ниска |+--------+

Тук имаме CDATA от iq елемент, който е вложен в user елемент. Постигнахме това с помощта на /user/iq като XPath.

Няма съвпадение

Ако такъв елемент не съществува, нищо не се връща.

Пример:

SELECT EXTRACTVALUE('<type>Cat</type>', '/name') AS "Result"; 

Резултат:

<пред>+--------+| Резултат |+--------+| |+--------+

Такъв е и случаят, ако сбъркате влагането.

Пример:

SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/iq') AS "Result"; 

Резултат:

<пред>+--------+| Резултат |+--------+| |+--------+

Тук използвахме /iq като XPath, когато трябваше да използваме /user/iq .

Празен XML

Празен XML документ ще даде празен резултат:

SELECT EXTRACTVALUE('', '/name') AS "Result"; 

Резултат:

<пред>+--------+| Резултат |+--------+| |+--------+

Празен XPath

Празен XPath връща грешка:

SELECT EXTRACTVALUE('<type>Cat</type>', ''); 

Резултат:

ГРЕШКА 1105 (HY000):Синтактична грешка на XPATH:''

Нулев XML

Предоставяне на null тъй като първият аргумент води до грешка:

SELECT EXTRACTVALUE(null, ''); 

Резултат:

ГРЕШКА 1105 (HY000):Синтактична грешка на XPATH:''

Null XPath

Предоставяне на null като вторият аргумент връща null :

SELECT EXTRACTVALUE('<type>Cat</type>', null) AS "Result"; 

Резултат:

<пред>+--------+| Резултат |+--------+| NULL |+--------+

Предоставяне само на един аргумент

Предоставянето на един аргумент води до грешка:

SELECT EXTRACTVALUE('<type>Cat</type>'); 

Резултат:

ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „EXTRACTVALUE“

Липсващ аргумент

Извикване на EXTRACTVALUE() без подаване на аргументи води до грешка:

SELECT EXTRACTVALUE(); 

Резултат:

ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „EXTRACTVALUE“

Въведение в XML

За повече информация относно XML вижте моя XML урок в Quackit. Този урок включва и въведение в XPath.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Множество подчинени устройства за отложена репликация за аварийно възстановяване с нисък RTO

  2. Как ASIN() работи в MariaDB

  3. Как работи TRIM() в MariaDB

  4. Как да конфигурирате AppArmor за системи, базирани на MySQL (MySQL/MariaDB репликация + Galera)

  5. 2 начина за връщане на редове, които съдържат само буквено-цифрови знаци в MariaDB