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

MySQL XML заявка

Решението на вашия проблем ще изисква използването на numbers таблица:таблица с цели числа, 1,2,3,.... до някаква разумна стойност, да речем 1024.

След това бихте използвали String Walking за решаване на проблема.

Ето оператора CREATE TABLE за numbers таблица:

CREATE TABLE numbers (
  `n` smallint unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`n`)
)
;
INSERT INTO numbers VALUES (NULL);
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;

Горното се попълва със стойности 1..1024

И сега заявката:

SELECT 
  SUBSTRING_INDEX(SUBSTRING_INDEX(ExtractValue(@XML, '/As/A/B'), ' ', n), ' ', -1) AS value
FROM
  numbers
WHERE
  n BETWEEN 1 AND ExtractValue(@XML, 'count(/As/A/B)')
;


+-------+
| value |
+-------+
| Chan  |
| Shey  |
| Bob   |
+-------+
3 rows in set (0.02 sec)

Използваме ExtractValue(@XML, 'count(/As/A/B)') за да получите стойността 3 -- броя на съответстващите XML елементи.

Преминавайки през числа 1, 2, 3, извличаме символ #1, символ #2, символ #3 от текста CHAN SHEY BOB , разделяне на интервал.

Бележки:

  • ExtractXML връща стойности, разделени с пространство. Но ако има интервал във върнатия текст - не тръгвайте. Би било неразличимо от разделителните пространства.

  • Възможно е да се избегне създаването на таблица с числа и генерирайте числата в движение . Не съветвам - това ще създаде много режийни разходи. Винаги е хубаво да имаш таблица с числа от 1024 реда.

Успех!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO множество заявки

  2. Кой е най-лесният начин да определите дали даден потребител е онлайн? (PHP/MYSQL)

  3. mysql списък с категории и подкатегории

  4. Как да промените секундите във времева стойност в MySQL

  5. Грешка при импортиране на Python MySQLdb - Mac 10.6