我在用于存储xml数据的表中有一个varchar列。是的,我知道有一个我应该使用的xml数据类型,但我认为这是在xml数据类型可用之前设置的,所以现在我必须使用varchar。 :)在varchar字段中解析SQL Server xml字符串
存储的数据看起来类似于以下内容:
<xml filename="100100_456_484351864768.zip"
event_dt="10/5/2009 11:42:52 AM">
<info user="TestUser" />
</xml>
我需要解析的文件名,以获得两个下划线在这种情况下将是“456”的数字。文件名的第一部分“不应该”改变长度,但中间数字会改变。我需要一个解决方案,如果第一部分的长度发生变化(你知道它会改变,因为“不应该改变”总是意味着它会改变)。
对于我现在所拥有的,我使用XQuery来提取文件名,因为我认为这可能比直接字符串操作更好。我将字符串转换为xml来执行此操作,但我不是XQuery专家,所以当然我遇到了问题。我找到了一个XQuery函数(substring-before),但无法使其正常工作(我甚至不确定该函数是否适用于SQL Server)。可能有一个XQuery函数很容易做到这一点,但如果有我不知道它。
所以,我从桌上的文件名类似于下面的查询:
select CAST(parms as xml).query('data(/xml/@filename)') as p
from Table1
从这个我认为我能够施放此回字符串,然后做一些instring或charindex函数来计算出下划线的位置,以便我可以将所有这些内容封装在子字符串函数中以挑选出我需要的部分。不用太过分,我很确定我最终可以这样做,但我知道必须有一个更简单的方法。这种方式会使SQL语句中的一个巨大的不可读的字段,即使我将它移动到一个函数中,仍然会混淆,试图找出发生了什么。
我敢肯定有一个比这更容易,因为它似乎是简单的字符串操作。也许有人可以指出我正确的方向。谢谢
什么版本的SQL Server? – 2009-10-10 01:39:03
对不起,直到现在我才看到这个评论。我们现在正在使用SQL Server 2008。 – Dusty 2009-10-12 20:53:00