आपकी समस्या के समाधान के लिए numbers
. के उपयोग की आवश्यकता होगी तालिका:पूर्णांकों की एक तालिका, 1,2,3,.... कुछ उचित मान तक, मान लीजिए 1024।
फिर आप स्ट्रिंग वॉकिंग का उपयोग करेंगे समस्या को हल करने के लिए।
यहां numbers
के लिए CREATE TABLE स्टेटमेंट दिया गया है टेबल:
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 से चलते हुए, हम CHAN SHEY BOB
टेक्स्ट से टोकन #1, टोकन #2, टोकन #3 निकालते हैं। , अंतरिक्ष के अनुसार विभाजित करना।
नोट:
-
ExtractXML सीमांकित स्थान को लौटाता है। लेकिन अगर लौटाए गए टेक्स्ट में कोई जगह है - नहीं जाना। यह परिसीमन रिक्त स्थान से अप्रभेद्य होगा।
-
संख्या तालिका और फ्लाई पर नंबर जेनरेट करें . मैं इसके खिलाफ सलाह देता हूं - यह बहुत अधिक उपरि पैदा करेगा। 1024 पंक्ति संख्या तालिका होना हमेशा अच्छा होता है।
शुभकामनाएँ!