sql server学习笔记 |
您所在的位置:网站首页 › 如何按符号分列 › sql server学习笔记 |
前言 之前一个项目运营要数据有点小麻烦,一开始我本着能动嘴就不动手的原则,让她们动手的,没想到她们用魔法打败了魔法 一,摸索 需求点:将收货地址根据符拆分成多列显示,,, 数据格式:(中国,北京,东城区,xxxx小区,xx栋,xxx单元,xxx号) 返回效果: 国家 省份 城市 小区 楼栋 单元 门号 中国 北京 东城区 xxxx小区 xx栋 xxx单元 xxx号 一眼看去问题不大,使用PARSENAME函数分分钟搞定,, PARSENAME sql server 自带函数,被分割的字符串必须是 '.',而且只能分割出4个字段, 所以使用的时候需要替换分割字符如: SELECT address, PARSENAME(REPLACE(address,',','.'),4) as 国家, PARSENAME(REPLACE(address,',','.'),3) as 省市, PARSENAME(REPLACE(address,',','.'),2) as 区域, PARSENAME(REPLACE(address,',','.'),1) as 小区 FROM [dbo].[Address] 定睛一看不好使,,,没有解决问题,之后看了sql文档发现了这个玩意STRING_SPLIT(SQL Server 2016 新加入) STRING_SPLIT 仅采用两个参数。 第一个是字符串,第二个是单个字符。STRING_SPLIT(字符串,分隔符) (STRING_SPLIT (string, separator)) 查询SQL, declare @str varchar(50) set @str='中国,北京,东城区,xxxx小区,1栋' select value from STRING_SPLIT(@str, ',')//默认字段 value 结果: value 中国 北京 东城区 xxxx小区 1栋 这么一看差不多了,二,自己动手 //@str :要分割的字符串 //@chars:分割符号 //@i :字符位置索引 create function [dbo].[split_str](@str varchar(50),@chars varchar(50), @i int) returns varchar(50) as begin declare @val varchar(50) declare @SorderIdTemp table( [Id] int identity(1,1), [Value] nvarchar(max)) --定义临时表 insert into @SorderIdTemp([Value]) select value from STRING_SPLIT(@str, @chars) select @val=value from @SorderIdTemp where [Id]=@i delete from @SorderIdTemp return @val end GO 效果: declare @str varchar(50) set @str='中国,北京,东城区,xxxx小区,xx栋,xxx单元,xxx号' select [dbo].[split_str](@str,',',1) as 国家,[dbo].[split_str](@str,',',2) as 省份, [dbo].[split_str](@str,',',3) as 城市,[dbo].[split_str](@str,',',4) as 小区,[dbo].[split_str](@str,',',5) as 楼栋, [dbo].[split_str](@str,',',6) as 单元, [dbo].[split_str](@str,',',7) as 门号
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |