Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn MySQL XML

Giải pháp cho vấn đề của bạn sẽ yêu cầu sử dụng numbers table:một bảng các số nguyên, 1,2,3, .... lên đến một giá trị hợp lý nào đó, chẳng hạn như 1024.

Sau đó, bạn sẽ sử dụng Đi bộ theo chuỗi để giải quyết vấn đề.

Đây là câu lệnh CREATE TABLE cho các số numbers bảng:

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;

Ở trên điền các giá trị 1..1024

Và bây giờ là truy vấn:

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)

Chúng tôi sử dụng ExtractValue(@XML, 'count(/As/A/B)') để nhận giá trị 3 - số lượng các phần tử XML phù hợp.

Chạy qua các số 1, 2, 3, chúng tôi trích xuất mã thông báo số 1, mã thông báo số 2, mã thông báo số 3 từ văn bản CHAN SHEY BOB , chia tách theo không gian.

Ghi chú:

  • ExtractXML trả về các giá trị được phân cách bằng không gian. Nhưng nếu có một khoảng trống trong văn bản được trả về - không được. Nó sẽ không thể phân biệt được với các khoảng cách phân định.

  • Có thể tránh tạo bảng số và tạo các con số một cách nhanh chóng . Tôi khuyên không nên - nó sẽ tạo ra rất nhiều chi phí. Luôn có một bảng số 1024 hàng.

Chúc các bạn thành công!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Văn bản bằng tiếng Bengali không được hiển thị trong tệp Unicode CSV

  2. Khi nào các kết nối được trả về nhóm kết nối với Trình quản lý thực thể Spring JPA (Hibernate)?

  3. cách đăng nhập vào mysql và truy vấn cơ sở dữ liệu từ thiết bị đầu cuối linux

  4. Cách sử dụng tốt nhất hàm bình luận trong MySQL

  5. MySQL:Tại sao chỉ định chiều rộng hiển thị mà không sử dụng zerofill