मेरे पास निम्न क्वेरी है जिसका उपयोग मैं कॉलम के पंक्ति मानों को एक मान में संयोजित करने के लिए कर रहा हूं।

SELECT
    SUBSTRING(
        ( 
            SELECT
                ',' + id_number AS 'data()'
            FROM
                users FOR XML PATH('')
        ),
        2,
        9999
    ) AS id_numbers

Id_number कॉलम varchar प्रकार का है। मैंने टेक्स्ट में कनवर्ट करने का प्रयास किया है लेकिन फिर भी त्रुटियां हो रही हैं।

0
Sql_Pete_Belfast 15 अप्रैल 2020, 15:05

1 उत्तर

सबसे बढ़िया उत्तर

id_number एक bigint है, आपको इसे एक टेक्स्ट प्रकार के लिए CONVERT या CAST करना होगा:

SELECT
    SUBSTRING(
        ( 
            SELECT
                ',' + CONVERT( varchar(20), id_number ) AS 'data()'
            FROM
                users FOR XML PATH('')
        ),
        2,
        9999
    ) AS id_numbers

यदि आप SQL सर्वर 2017 या बाद के संस्करण का उपयोग कर रहे हैं तो आप STRING_AGG (MS SQL सर्वर के MySQL के GROUP_CONCAT के समतुल्य) का उपयोग कर सकते हैं:

SELECT
    STRING_AGG( id_number, ', ' )

(एसक्यूएल सर्वर आपके लिए अंतर्निहित bigint-से-varchar रूपांतरण को संभालेगा क्योंकि बाइनरी ऑपरेटरों के उपयोग से कोई अस्पष्टता नहीं है)।

1
Dai 15 अप्रैल 2020, 12:09