MySQL संस्करण 8.0.19 में स्ट्रिंग को स्तंभों में कैसे विभाजित किया जाए क्योंकि कुछ पुराने फ़ंक्शन कैरेक्टर इंडेक्स (), string_split () [डुप्लिकेट] की तरह उपलब्ध नहीं हैं।

Dec 29 2020

मेरे पास एक पंक्ति है जिसे मैं कॉलम में विभाजित करना चाहूंगा उदाहरण के लिए नाम है कोड उत्पाद के आइटम के लिए 01,04,07 दिखाने वाली पंक्ति है।

मैं उत्पाद आइटम को कॉलम में विभाजित करना चाहता हूं। कोई भी सुझाव उपयोगी होगा क्योंकि मैंने पुराने कार्यों की कोशिश की है लेकिन एहसास हुआ कि जिस एसक्यूएल संस्करण पर मैं काम कर रहा हूं उसमें स्ट्रिंग_एसपीएलटी और चरित्र सूचकांक जैसे विकल्प नहीं हैं। मैंने इस्तेमाल किया instr()और substring()एक खरीदार ऊपर दिखाए गए से अधिक या कम आइटम खरीद सकता है।

जवाब

1 GMB Dec 29 2020 at 05:15

आपकी तात्कालिक समस्या आपका डिजाइन है। आपको एक स्ट्रिंग कॉलम में कई पूर्णांक मानों को संग्रहीत नहीं करना चाहिए। मूल्यों के प्रत्येक टपल को एक अलग पंक्ति पर संग्रहीत किया जाना चाहिए।

आपके प्रश्न के लिए: हाल के MySQL संस्करण में, एक विकल्प JSON है। मानों को स्तंभों के बजाय पंक्तियों में रखना उचित हो सकता है। यहाँ यह करने का एक तरीका है:

select t.*, x.*
from mytable t
cross join lateral json_table(
    concat('[', t.code, ']'),
    '$[*]' columns (rn for ordinality, code_part int path '$')
) x

यदि आप परिणाम कॉलम के रूप में चाहते हैं, तो एक विकल्प सशर्त एकत्रीकरण है; आपको आवश्यक के रूप में कई स्तंभों की गणना करने की आवश्यकता है:

select t.*,
    max(case when x.rn = 1 then x.code_part end) as code_part_1,
    max(case when x.rn = 2 then x.code_part end) as code_part_2,
    ...
from mytable t
cross join lateral json_table(
    concat('[', t.code, ']'),
    '$[*]' columns (rn for ordinality, code_part int path '$')
) x
group by t.id  -- assuming that "id" is the primary key of "mytable"