栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

解析字符串SQL

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解析字符串SQL

declare @s varchar(max) = 'I=940;A=29.5;D=20090901|I=941;A=62.54;D=20090910|I=942;A=58.99;D=20091005|I=954;A=93.45;D=20091201|I=944;A=96.76;D=20091101|I=946;A=52.5;D=20091101|I=943;A=28.32;D=20091101|I=945;A=52.5;D=20091101|I=955;A=79.81;D=20091201|I=950;A=25.2;D=20091124|I=948;A=31.86;D=20091110|I=949;A=28.32;D=20091120|I=947;A=25.2;D=20091109|I=951;A=242.54;D=20091124|I=952;A=28.32;D=20091129|I=956;A=38.94;D=20091210|I=957;A=107.39;D=20091215|I=958;A=32.55;D=20091228|I=959;A=27.3;D=20091228|I=960;A=24.79;D=20091230|I=1117;A=28.32;D=20100131|I=1115;A=272.58;D=20100131|I=1116;A=159.6;D=20100209'declare @xml xmlselect @xml = '<item><value>'+replace(replace(@s, ';','</value><value>'), '|','</value></item><item><value>')+'</value></item>'select N.value('substring(value[1],3)', 'int') as Invoice,       N.value('substring(value[2],3)', 'money') as Amount,       N.value('substring(value[3],3)', 'date') as [Date]from @xml.nodes('item') as T(N)

结果:

Invoice     Amount     Date----------- --------------------- ----------940         29,50      2009-09-01941         62,54      2009-09-10942         58,99      2009-10-05954         93,45      2009-12-01944         96,76      2009-11-01946         52,50      2009-11-01943         28,32      2009-11-01945         52,50      2009-11-01955         79,81      2009-12-01950         25,20      2009-11-24948         31,86      2009-11-10949         28,32      2009-11-20947         25,20      2009-11-09951         242,54     2009-11-24952         28,32      2009-11-29956         38,94      2009-12-10957         107,39     2009-12-15958         32,55      2009-12-28959         27,30      2009-12-28960         24,79      2009-12-301117        28,32      2010-01-311115        272,58     2010-01-311116        159,60     2010-02-09

对于SQL Server 2005,您需要使用datetime而不是date

select N.value('substring(value[1],3)', 'int') as Invoice,       N.value('substring(value[2],3)', 'money') as Amount,       N.value('substring(value[3],3)', 'datetime') as [Date]from @xml.nodes('item') as T(N)

要从表中读取,您需要这样做。

declare @s varchar(max) = 'I=940;A=29.5;D=20090901|I=941;A=62.54;D=20090910|I=942;A=58.99;D=20091005|I=954;A=93.45;D=20091201|I=944;A=96.76;D=20091101|I=946;A=52.5;D=20091101|I=943;A=28.32;D=20091101|I=945;A=52.5;D=20091101|I=955;A=79.81;D=20091201|I=950;A=25.2;D=20091124|I=948;A=31.86;D=20091110|I=949;A=28.32;D=20091120|I=947;A=25.2;D=20091109|I=951;A=242.54;D=20091124|I=952;A=28.32;D=20091129|I=956;A=38.94;D=20091210|I=957;A=107.39;D=20091215|I=958;A=32.55;D=20091228|I=959;A=27.3;D=20091228|I=960;A=24.79;D=20091230|I=1117;A=28.32;D=20100131|I=1115;A=272.58;D=20100131|I=1116;A=159.6;D=20100209'declare @YourTable table(ID int, s varchar(max))insert into @YourTable values(1, @s),(2, @s)select Y.ID,       T.N.value('substring(value[1],3)', 'int') as Invoice,       T.N.value('substring(value[2],3)', 'money') as Amount,       T.N.value('substring(value[3],3)', 'date') as [Date]from @YourTable as Y  cross apply (select cast('<item><value>'+replace(replace(Y.s, ';','</value><value>'), '|','</value></item><item><value>')+'</value></item>' as xml)) as X(XMLCol)  cross apply X.XMLCol.nodes('item') as T(N)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号