Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

अल्पविराम सीमांकित स्ट्रिंग को एसक्यूएल सर्वर में एकाधिक कॉलम में कनवर्ट करना

आप इसे SQL Fiddle पर काम करते हुए देख सकते हैं:http://sqlfiddle.com/#!3/ 8c3ee/32

पेश है इसका मांस:

with parsed as (
  select
  commasepa,
  root.value('(/root/s/col[@name="X"])[1]', 'varchar(20)') as X,
  root.value('(/root/s/col[@name="Y"])[1]', 'varchar(20)') as Y,
  root.value('(/root/s/col[@name="Z"])[1]', 'varchar(20)') as Z,
  root.value('(/root/s/col[@name="A"])[1]', 'varchar(20)') as A,
  root.value('(/root/s/col[@name="B"])[1]', 'varchar(20)') as B,
  root.value('(/root/s/col[@name="C"])[1]', 'varchar(20)') as C,
  root.value('(/root/s/col[@name="D"])[1]', 'varchar(20)') as D
FROM
(
select
   commasepa,
   CONVERT(xml,'<root><s><col name="' + REPLACE(REPLACE(COMMASEPA, '=', '">'),',','</col></s><s><col name="') + '</col></s></root>') as root
FROM
  samp
) xml
)
update 
  samp
  set
  samp.x = parsed.x,
  samp.y = parsed.y,
  samp.z = parsed.z,
  samp.a = parsed.a,
  samp.b = parsed.b,
  samp.c = parsed.c,
  samp.d = parsed.d
from
  parsed
where
  parsed.commasepa = samp.commasepa;

पूर्ण प्रकटीकरण - मैं sqlfiddle.com का लेखक हूं

यह पहले प्रत्येक अल्पविराम स्ट्रिंग को एक XML ऑब्जेक्ट में परिवर्तित करके काम करता है जो इस तरह दिखता है:

<root>
 <s>
  <col name="X">1</col>
 </s>
 <s>
  <col name="Y">2</col>
 </s>
  ....
</root>

एक बार मेरे पास उस प्रारूप में स्ट्रिंग होने के बाद, मैं xquery विकल्पों का उपयोग करता हूं जो SQL सर्वर 2005 (और ऊपर) समर्थन करते हैं, जो कि .value('(/root/s/col[@name="X"])[1]', 'varchar(20)') अंश। मैं प्रत्येक संभावित कॉलम को व्यक्तिगत रूप से चुनता हूं, इसलिए उपलब्ध होने पर वे सामान्यीकृत और आबादी वाले होते हैं। उस सामान्यीकृत प्रारूप के साथ, मैं परिणाम सेट को एक सामान्य तालिका अभिव्यक्ति (सीटीई) के साथ परिभाषित करता हूं जिसे मैंने 'पार्स' कहा था। इस सीटीई को फिर अपडेट स्टेटमेंट में वापस जोड़ दिया जाता है, ताकि मूल तालिका में मूल्यों को पॉप्युलेट किया जा सके।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2008 Intellisense समस्या

  2. SQL सर्वर (T-SQL) से HTML ईमेल कैसे भेजें

  3. SQL सर्वर 2008 - यदि मौजूद नहीं है तो अन्य अपडेट करें

  4. SQL सर्वर में OR स्टेटमेंट के लिए उपयोग करने के लिए सर्वश्रेष्ठ इंडेक्स (एस)

  5. एसक्यूएल सर्वर (टी-एसक्यूएल उदाहरण) में सभी अक्षम जांच बाधाओं को कैसे वापस करें