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
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