Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytania MySQL XML

Rozwiązanie twojego problemu wymagałoby użycia numbers table:tabela liczb całkowitych, 1,2,3,.... do pewnej rozsądnej wartości, powiedzmy 1024.

Następnie użyjesz Chodzenie po ciągach aby rozwiązać problem.

Oto instrukcja CREATE TABLE dla numbers tabela:

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;

Powyższe wypełnia się wartościami 1..1024

A teraz zapytanie:

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)

Używamy ExtractValue(@XML, 'count(/As/A/B)') aby uzyskać wartość 3 -- liczba pasujących elementów XML.

Biegnąc przez cyfry 1, 2, 3, wyciągamy token #1, token #2, token #3 z tekstu CHAN SHEY BOB , dzieląc spację.

Uwagi:

  • ExtractXML zwraca wartości rozdzielone spacjami. Ale jeśli w zwróconym tekście jest spacja - nie idź. Byłoby to nie do odróżnienia od oddzielających spacji.

  • Można uniknąć tworzenia tabeli liczb i generuj liczby w locie . Odradzam - spowodowałoby to duże obciążenie. Posiadanie tabeli liczb 1024 wierszy jest zawsze miłe.

Powodzenia!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikalne ograniczenie, które pozwala na puste wartości w MySQL

  2. Do czego służy katalog adnotacji @Table JPA i zmienne schematu?

  3. Zapytania JOIN a wiele zapytań

  4. Tablica w zapytaniu SQL?

  5. Zdobądź wszystkich użytkowników z wyjątkiem aktualnie zalogowanego użytkownika w laravel eloquent