SQLServer 自定义分割函数

        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,@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,@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,@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,@District,2)   
                END
            END
            ELSE                       --州
            BEGIN
                SELECT @TestInfo = dbo.Get_StrArrayStrOfIndex(@地点,'州',1)
                --给省级下的州赋值
                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,@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,@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,@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,@District,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(@地点,@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,@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,@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,@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,@District,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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追夢秋陽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值