मैं निम्नलिखित SQL तालिका को कनवर्ट करना चाहता हूं:

User_Index   Emails
------------------------
  5          test@db.com;test1@db.com
  10         re2@db.com;re3@db.com

में:

  User_Index   Emails
------------------------
  5          test@db.com
  5          test1@db.com
  10         re2@db.com
  10         re3@db.com

मैं SQL Server 2008 का उपयोग कर रहा हूं इसलिए SPLIT_LINES फ़ंक्शन काम नहीं करता है, मैं ईमेल कॉलम को सेमी-कोलन मान से विभाजित करने का प्रयास कर रहा हूं।

1
Code Junkie 19 अक्टूबर 2020, 19:19

2 जवाब

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

एक विधि एक पुनरावर्ती CTE है:

with cte as (
      select user_index, convert(varchar(max), null) as email, convert(varchar(max), emails + ';') as rest
      from t
      union all
      select user_index, left(rest, charindex(';', rest) - 1), stuff(rest, 1, charindex(';', rest) + 1, '')
      from cte
      where rest <> ''
     )
select user_index, email
from cte
where email is not null;

यहां एक db<>fiddle है।

0
Gordon Linoff 19 अक्टूबर 2020, 19:47

कोशिश करें https://github.com/DevNambi/sql-server-regex

उदाहरण:

https://github.com/DevNambi/sql-server-regex/blob/master/examples/split.md

आप इसे 2005+ . पर स्थापित कर सकते हैं

या https://stackoverflow.com/a/10914602/2372403

1
MichalP 19 अक्टूबर 2020, 19:26