T-SQL解析String的一部分

时间:2010-11-19 17:34:06

标签: string tsql parsing

请帮助我在SQL 2008中使用T-SQL查询从第一个双引号到第二个双引号之间获取值。该字符串将有许多双引号。 XXX的长度可变。

E.g。它将返回abc@pluto.com 柱

XXX Usr =“abc@pluto.com”zone =“fyrkkk =”0“htyy”ukbpfrttt897 =“009”/

非常感谢。

3 个答案:

答案 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('“',co​​lumn)

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)