SQLServer 自定义分割函数
发布时间:2020-12-12 13:38:51 所属栏目:MsSql教程 来源:网络整理
导读:? ? ? ? CREATE FUNCTION f_SplitAddress(@地点 nvarchar(4000),@type int) ? ? ? ? RETURNS nvarchar(4000) ? ? ? ? AS ? ? ? ? BEGIN ? ? ? ? DECLARE @TestInfo varchar(50),@Province varchar(50),@result nvarchar(255),? ? ? ? ? ? ? ? ? @City varcha
? ? ? ? CREATE FUNCTION f_SplitAddress(@地点 nvarchar(4000),@type int) ? ? ? ? RETURNS nvarchar(4000) ? ? ? ? AS ? ? ? ? BEGIN ? ? ? ? DECLARE @TestInfo varchar(50),@Province varchar(50),@result nvarchar(255),? ? ? ? ? ? ? ? ? @City varchar(50),@District varchar(50),@AAddress varchar(255)? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? --更新事件地址(A:获取省(直辖市)) ? ? ? ? SELECT @TestInfo = dbo.Get_StrArrayStrOfIndex(@地点,'省',1) ? ? ? ? IF @TestInfo <> @地点 ? ? ? ? ?--表示为省份 ? ? ? ? BEGIN ? ? ? ? ? ? SET @Province = @TestInfo ?--给省赋值 ? ? ? ? ? ? --获取省级下的市(也可能是州) ? ? ? ? ? ? SELECT @TestInfo = dbo.Get_StrArrayStrOfIndex(@地点,'市',1) ? ? ? ? ? ? IF @TestInfo <> @地点 ? ? ?--市 ? ? ? ? ? ? BEGIN? ? ? ? ? ? ? ? ? --给省级下的市赋值 ? ? ? ? ? ? ? ? SELECT @City = dbo.Get_StrArrayStrOfIndex(@TestInfo,2) ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? SELECT @TestInfo = dbo.Get_StrArrayStrOfIndex(@地点,@City,2) ? ? ? ? ? ? ? ? IF(SELECT dbo.Get_StrArrayStrOfIndex(@TestInfo,'镇',1)) <> @TestInfo ? ? ? --镇 ? ? ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? ? ? --给镇赋值 ? ? ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,1) ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? --给村赋值 ? ? ? ? ? ? ? ? ? ? SELECT @AAddress = dbo.Get_StrArrayStrOfIndex(@TestInfo,@District,2)? ? ? ? ? ? ? ? ? END ? ? ? ? ? ? ? ? ELSE IF(SELECT dbo.Get_StrArrayStrOfIndex(@TestInfo,'县',1)) <> @TestInfo ?--县 ? ? ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? ? ? --给县赋值 ? ? ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,1) ? ? ? ? ? ? ? ? ? ? --给村赋值 ? ? ? ? ? ? ? ? ? ? SELECT @AAddress = dbo.Get_StrArrayStrOfIndex(@TestInfo,2) ? ? ? ? ? ? ? ? ? END ? ? ? ? ? ? ? ? ELSE IF(SELECT dbo.Get_StrArrayStrOfIndex(@TestInfo,'州',1)) <> @TestInfo ?--州 ? ? ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? ? ? --给州赋值 ? ? ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,'区',1)) <> @TestInfo ?--区 ? ? ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? ? ? --给区赋值 ? ? ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,2) ?? ? ? ? ? ? ? ? ? END ? ? ? ? ? ? ? ? ELSE IF(SELECT dbo.Get_StrArrayStrOfIndex(@TestInfo,1)) <> @TestInfo ?--市 ? ? ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? ? ? --给区赋值 ? ? ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,2) ?? ? ? ? ? ? ? ? ? END ? ? ? ? ? ? END ? ? ? ? ? ? ELSE ? ? ? ? ? ? ? ? ? ? ? --州 ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? SELECT @TestInfo = dbo.Get_StrArrayStrOfIndex(@地点,1) ? ? ? ? ? ? ? ? --给省级下的州赋值 ? ? ? ? ? ? ? ? SELECT @City = dbo.Get_StrArrayStrOfIndex(@TestInfo,2) ?? ? ? ? ? ? ? ? ? END ? ? ? ? ? ? END ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? END ? ? ? ? ELSE IF(SELECT dbo.Get_StrArrayStrOfIndex(@地点,1)) <> @地点 ? ? ? ? BEGIN ? ? ? ? ? ? --表示为直辖市 ? ? ? ? ? ? SELECT @TestInfo = dbo.Get_StrArrayStrOfIndex(@地点,1) ? ? ? ? ? ?? ? ? ? ? ? ? SET @Province = @TestInfo ?--给直辖市赋值 ? ? ? ? ? ? SET @City = @Province? ? ? ? ? ? ?? ? ? ? ? ? ? SELECT @TestInfo = dbo.Get_StrArrayStrOfIndex(@地点,2) ? ? ? ? ? ? IF(SELECT dbo.Get_StrArrayStrOfIndex(@TestInfo,1)) <> @TestInfo ? ? ? --镇 ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? --给镇赋值 ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,1) ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? --给村赋值 ? ? ? ? ? ? ? ? SELECT @AAddress = dbo.Get_StrArrayStrOfIndex(@TestInfo,2)? ? ? ? ? ? ? END ? ? ? ? ? ? ELSE IF(SELECT dbo.Get_StrArrayStrOfIndex(@TestInfo,1)) <> @TestInfo ?--县 ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? --给县赋值 ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,1) ? ? ? ? ? ? ? ? --给村赋值 ? ? ? ? ? ? ? ? SELECT @AAddress = dbo.Get_StrArrayStrOfIndex(@TestInfo,2) ? ? ? ? ? ? ? END ? ? ? ? ? ? ELSE IF(SELECT dbo.Get_StrArrayStrOfIndex(@TestInfo,1)) <> @TestInfo ?--州 ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? --给州赋值 ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,1)) <> @TestInfo ?--区 ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? --给区赋值 ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,2) ?? ? ? ? ? ? ? END ? ? ? ? ? ? ELSE IF(SELECT dbo.Get_StrArrayStrOfIndex(@TestInfo,1)) <> @TestInfo ?--市 ? ? ? ? ? ? BEGIN ? ? ? ? ? ? ? ? --给市赋值 ? ? ? ? ? ? ? ? SELECT @District = dbo.Get_StrArrayStrOfIndex(@TestInfo,2) ?? ? ? ? ? ? ? END ? ?? ? ? ? ? END ? ? ? ?? ? ? ? ? --返回值(@type:0返回全部信息,1返回省,2返回市,3返回县,4返回村) ? ? ? ?IF @type = 0 ? ? ? ?BEGIN ? ? ? ? ? ? SET @result = @Province+@City+@District+@AAddress ? ? ? ?END ? ? ? ?ELSE IF ?@type = 1 ? ? ? ?BEGIN ? ? ? ? ? ? ? ? SET @result = @Province ? ? ? ?END ? ?? ? ? ? ?ELSE IF ?@type = 2 ? ? ? ?BEGIN ? ? ? ? ? ? ? ? SET @result = @City ? ? ? ?END ? ? ? ? ?ELSE IF ?@type = 3 ? ? ? ?BEGIN ? ? ? ? ? ? ? ? SET @result = @District ? ? ? ?END ?? ? ? ? ?ELSE IF ?@type = 4 ? ? ? ?BEGIN ? ? ? ? ? ? ? ? SET @result = @AAddress ? ? ? ?END ? ? ? ?ELSE ? ? ? ?BEGIN ? ? ? ? ? ?SET @result = @Province+@City+@District+@AAddress ? ? ? ?END? ? ? ? ? ? ? ? ?IF @result = '' OR @result = NUll ? ? ? ?BEGIN ? ? ? ? ? SET @result = '很遗憾,分割失败!' ? ? ? ?END ? ? ? ? ?RETURN @result ? ?END ? ?--调用 ? ?SELECT dbo.f_SplitAddress('湖北省赤壁市车埠镇车埠村十一组50号',0) ? ?--返回所有:湖北省赤壁市车埠镇车埠村十一组50号 --此函数不可缺少(要先写) CREATE function [dbo].[Get_StrArrayStrOfIndex] ( ?@str varchar(1024),--要分割的字符串 ?@split varchar(10),--分隔符号 ?@index int ? ? ? ? ?--取第几个元素 ) returns varchar(1024) as begin ?declare @location int ?declare @start int ?declare @next int ?declare @seed int ?set @str=ltrim(rtrim(@str)) ?set @start=1 ?set @next=1 ?set @seed=len(@split) ?set @location=charindex(@split,@str) ?while @location<>0 and @index>@next ?begin ?set @start=@location+@seed ?set @location=charindex(@split,@str,@start) ?set @next=@next+1 ?end ?if @location =0 select @location =len(@str)+1 ?--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。 ? ?return substring(@str,@start,@location-@start+1) end
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |