请帮助我在SQL 2008中使用T-SQL查询从第一个双引号到第二个双引号之间获取值。该字符串将有许多双引号。 XXX的长度可变。
E.g。它将返回abc@pluto.com 柱
XXX Usr =“abc@pluto.com”zone =“fyrkkk =”0“htyy”ukbpfrttt897 =“009”/
非常感谢。
答案 0 :(得分:1)
使用CHARINDEX查找双引号,使用SUBSTRING获取字符串
答案 1 :(得分:1)
对我来说,这看起来只是错误的XML语法。
DECLARE @XMLData XML = N'<Node Usr="abc@pluto.com" zone="" fyrkkk="0" htyy="" ukbpfrttt897="009" />'
SELECT tab.col.value('@Usr','NVARCHAR(128)') AS UserMail
FROM @XMLData.nodes('/Node[1]') AS tab(col)
答案 2 :(得分:0)
一旦知道这些索引,就需要CHARINDEX()的组合来查找引号的位置,并使用SUBSTRING()来选择所需的字符串部分。不幸的是,CHARINDEX()给出了第一次出现,所以这需要一些工作。
SELECT SUBSTRING(column, CHARINDEX('"', column), CHARINDEX('"', SUBSTRING(column, CHARINDEX('"', column), 100)))
为了更好地理解这一点,用q1(第一个引用的索引)替换CHARINDEX('“',column)
SELECT SUBSTRING(column, q1, CHARINDEX('"', SUBSTRING(column, q1, 100)))
从q1获取列的子字符串(索引第一次出现在“q1之后的所有内容中)。”100可以是任何比该电子邮件的最大长度更长的整数,我想确保包含第二个引用并且没有问题结束了。玩这个,可能会有一个错误的错误
SUBSTRING(单词,开头,长度)http://msdn.microsoft.com/en-us/library/ms187748.aspx CHARINDEX(word,char)