Sql server 来自XML(varchar)单元格的MSSQL编号
考虑到nvarchar(max)中的单元格是两个标记之间的数字,您能告诉我如何不仅正确而且漂亮地解析XML吗 示例(XML):Sql server 来自XML(varchar)单元格的MSSQL编号,sql-server,xml,parsing,shred,Sql Server,Xml,Parsing,Shred,考虑到nvarchar(max)中的单元格是两个标记之间的数字,您能告诉我如何不仅正确而且漂亮地解析XML吗 示例(XML): 9223372036854775807 30 708976 13227494000000000对错2147483647 11 0 132271122849228006 XXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYXXXXXXXX DFSD 您需要获取(708976)中的内容。我在数据库中得到以下查询: SELECT substring
9223372036854775807 30 708976 13227494000000000对错2147483647 11 0 132271122849228006 XXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYXXXXXXXX DFSD
您需要获取(708976)中的内容。我在数据库中得到以下查询:
SELECT substring (s.Value, CHARINDEX ('<PagesLimit>', s.Value) +12, CHARINDEX ('</PagesLimit>', s.Value, CHARINDEX ('<PagesLimit>', s.Value) +12) - CHARINDEX ('<PagesLimit>', s.Value) -12) as My_String
from dbo.Settings s
选择子字符串(s.Value,CHARINDEX(“”,s.Value)+12,CHARINDEX(“”,s.Value,CHARINDEX(“”,s.Value)+12)-CHARINDEX(“”,s.Value)-12)作为我的字符串
从dbo.s
如何使它更简洁、更符合逻辑?而不是通过选择来回的字符数。
谢谢。您的XML格式不正确。。。我不得不删除一些空白,还有两个结束标记,它们缺少开始标记(找到它们) XML不能被解析为带有一些花哨额外内容的字符串。有一些使用XQuery和XPath的原生XML方法 试试这个:
DECLARE @xml XML=
N'<SignedLicenseInfo>
<LicenseInfo>
<ExpirationDate> 9223372036854775807 </ExpirationDate>
<AvailiableModules> 30 </AvailiableModules>
<PagesLimit> 708,976 </PagesLimit>
<PagesLimitRenewDate> 132274944000000000 </PagesLimitRenewDate>
<IsDefaultLicense> true </IsDefaultLicense>
<CustomModuleAuthorId />
<IsCountRecognizedPagesOnly> false </IsCountRecognizedPagesOnly>
<IsCyrillicLanguageEnabled> true </IsCyrillicLanguageEnabled>
<MaximumNumberOfTemplateFields> 2147483647 </MaximumNumberOfTemplateFields>
<Type> 11 </Type>
<Amount> 0 </Amount>
<!-- /StationInfo -->
<!-- /LicenseStationInfo -->
<CustomFeatures />
<LocalExpirationDate> 132271122849228006 </LocalExpirationDate>
</LicenseInfo>
<Signature> XXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXdfsd </Signature>
</SignedLicenseInfo>';
SELECT @xml.value('(/SignedLicenseInfo/LicenseInfo/PagesLimit/text())[1]','varchar(max)');
DECLARE@xml=
不
9223372036854775807
30
708,976
132274944000000000
符合事实的
错误的
符合事实的
2147483647
11
0
132271122849228006
XXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXX DFSD
';
选择@xml.value(“(/SignedLicenseInfo/LicenseInfo/PagesLimit/text())[1]”,选择“varchar(max)”;
这将返回
708976
,感谢大家。利用提供的信息,我做到了:
declare @xml xml;
SELECT @xml = s.Value from dbo.Settings s where s.Name='LicenseString';
select @xml.value('(/SignedLicenseInfo/LicenseInfo/PagesLimit)[1]', 'int');
看看XQUERY。回答得好,我这边+1!
declare @xml xml;
SELECT @xml = s.Value from dbo.Settings s where s.Name='LicenseString';
select @xml.value('(/SignedLicenseInfo/LicenseInfo/PagesLimit)[1]', 'int');