Dizin

2010-11-19 28 views
0

'un T-SQL ayrıştırma parçası Lütfen ilk çift alıntıdan ikinci çifte alıntıya kadar değer elde etmek için SQL 2008'deki T-SQL sorgusunda bana yardımcı olun. Dize birçok çift tırnak içerecek. XXX, değişken uzunlukta olacaktır.Dizin

E.g. Bu Sütun ukbpfrttt897 = "009"/

teşekkür ederiz

XXX Usr = "[email protected]" bölgesi = "fyrkkk =" 0" htyy" [email protected] dönecektir.

cevap

0

Bu dizinleri bildiğinizde, tırnakların konumunu ve SUBSTRING() öğesini istediğiniz dizgenin bir kısmını seçmek için bir CHARINDEX() kümesine ihtiyacınız vardır. Ne yazık ki CHARINDEX(), İLK oluşumu verir, bu yüzden biraz iş alacak.

SELECT SUBSTRING(column, CHARINDEX('"', column), CHARINDEX('"', SUBSTRING(column, CHARINDEX('"', column), 100))) 

charIndex (değiştirin '"' q1 ile, sütun) (endeksinin ilk geçtiği yer için (ilk alıntının indeksi) q1 gelen sütunun

SELECT SUBSTRING(column, q1, CHARINDEX('"', SUBSTRING(column, q1, 100))) 

alın alt dize" Bu daha iyi anlamak için q1'den sonra her şeyde). 100, bu e-postanın maksimum uzunluğundan daha uzun bir tamsayı olabilir, jsut ikinci teklifin dahil edildiğinden emin olmak istedim ve devam eden bir sorun yok. Bu oyna, olabilir bir off-by-tek hata

substring (kelime, başlangıç, uzunluk) http://msdn.microsoft.com/en-us/library/ms187748.aspx charIndex (kelime, char)

1

Kullanım CHARINDEX almak için çift tırnak ve SUBSTRING bulmak için string out

1

Bu, benim için sadece yanlış XML sözdizimine benziyor.

DECLARE @XMLData XML = N'<Node Usr="[email protected]" zone="" fyrkkk="0" htyy="" ukbpfrttt897="009" />' 

SELECT tab.col.value('@Usr','NVARCHAR(128)') AS UserMail 
    FROM @XMLData.nodes('/Node[1]') AS tab(col)