sql server学习笔记

您所在的位置:网站首页 如何按符号分列 sql server学习笔记

sql server学习笔记

2024-06-30 18:53| 来源: 网络整理| 查看: 265

前言 

之前一个项目运营要数据有点小麻烦,一开始我本着能动嘴就不动手的原则,让她们动手的,没想到她们用魔法打败了魔法

一,摸索 需求点:将收货地址根据符拆分成多列显示,,, 数据格式:(中国,北京,东城区,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