基于postgresl的gaussDB(DWS)地址省市区解析函数

地址格式为: 省(自治区,直辖市)、市、区。

直辖市的地址格式为, 北京市北京市海淀区xxxxx。 若是北京市海淀区xxx,自己改改就可以了

采用的是笨办法,穷举。

涉及的两个主要内置函数。

1. instr( <start_position> ,'str1' , 'str2' , <times>) 。

查找str2在str1出现的位置。num是出现的次数,默认是1。例如num=2,就是str2在str1第二次出现的位置。start_position是起始的位置下标,默认是从头开始即 1。

若str2在str1找不到,则返回0

sql 复制代码
instr('123456', '2')  -- 结果是: 2. 位置索引值是从1开始

instr('123456', '2' , 2) -- 结果是0 , 因为2 只出现一次 

instr('新疆维吾尔族自治区','自治区') -- 结果是7 

2. substr(str1, start_position, <length> )

截取字符串, 从str1 的 start_position开始截取, 截取长度是 length。length不填就是截取到字符串的最右边。

例如 start_position=2, length=3, str1= ''12345678''

sql 复制代码
substr('123456', 2, 3) -- 结果是: 234. 因为postgres是下标索引是1开始

substr('123456', 1, 3) -- 结果是: 123. 因为postgres是下标索引是1开始
substr('123456', 0, 3) -- 结果是: 123. 0也当成1

substr('123456', 2) -- 结果是: 23456.  长度值不填,默认就是截取到最右边

substr('新疆维吾尔族自治区',1 ,instr('新疆维吾尔族自治区','自治区'))
-- substr('新疆维吾尔族自治区',1 , 7)
-- '新疆维吾尔族自'

substr('新疆维吾尔族自治区',1 ,instr('新疆维吾尔族自治区','自治区')+2)
-- substr('新疆维吾尔族自治区',1 , 7+2)
-- '新疆维吾尔族自治区'

3. 省市区解析函数

sql 复制代码
CREATE OR REPLACE FUNCTION dm.f_get_province(i_address character varying(500))
 RETURNS character varying
 LANGUAGE plpgsql
 STABLE NOT FENCED SHIPPABLE  -- DWS特有的,如果你是postgres就不用
AS $$
DECLARE
  p_province VARCHAR2(500);
  text_var1 text;
  text_var2 text;
  text_var3 text;
BEGIN

  SELECT 
	  CASE WHEN instr(i_address,'省') >0 THEN substr(i_address,1,instr(i_address,'省'))
		   WHEN instr(i_address,'自治区') >0 THEN substr(i_address,1,instr(i_address,'自治区')+2)
		   WHEN instr(i_address,'特别行政区') >0 THEN substr(i_address,1,instr(i_address,'特别行政区')+4)
		   WHEN instr(i_address,'北京市') > 0 then substr(i_address,1, instr(i_address, '北京市')+2)
		   WHEN instr(i_address,'天津市') > 0 then substr(i_address,1, instr(i_address, '天津市')+2)
		   WHEN instr(i_address,'上海市') > 0 then substr(i_address,1, instr(i_address, '上海市')+2)
		   WHEN instr(i_address,'重庆市') > 0 then substr(i_address,1, instr(i_address, '重庆市')+2)
	  ELSE i_address
	  END PROVINCE INTO p_province ;
   
  RETURN (p_province) ;
  EXCEPTION
     WHEN others THEN
     
	   GET STACKED DIAGNOSTICS text_var1 = RETURNED_SQLSTATE  ,
                               text_var2 = MESSAGE_TEXT  ,
                               text_var3 = PG_EXCEPTION_DETAIL;
	   RAISE NOTICE E'--- [ 已处理的异常代码_RETURNED_SQLSTATE ] : %', text_var1;    -- 记录异常信息
	   RAISE NOTICE E'--- [ 已处理的异常简要信息_MESSAGE_TEXT ] : %', text_var2;
	   RAISE NOTICE E'--- [ 已处理的异常详细信息_PG_EXCEPTION_DETAIL ] : %', text_var3;
       
	   RETURN ('') ;   -- 地址异常, 返回空 -- 解析异常, 直接返回空字符串
END $$
;

-------  获取城市  ,  直辖市,地级市,地区、自治州、盟

CREATE OR REPLACE FUNCTION dm.f_get_city(i_address character varying(500))
 RETURNS character varying
 LANGUAGE plpgsql
 STABLE NOT FENCED SHIPPABLE
AS $$
DECLARE
  p_city VARCHAR2(500);
  text_var1 text;
  text_var2 text;
  text_var3 text;
BEGIN
                                     
  SELECT                
	  CASE  WHEN instr(i_address,'特别行政区') >0 THEN  case  when instr(i_address,'香港特别行政区') > 0 THEN '香港特别行政区'
	                                                         when instr(i_address,'澳门特别行政区') > 0 THEN '澳门特别行政区'
														     else i_address
												       end
					   
		   WHEN instr(i_address,'北京市') > 0 then '北京市'									
		   WHEN instr(i_address,'天津市') > 0 then '天津市'
           WHEN instr(i_address,'上海市') > 0 then '上海市'	 		   
		   WHEN instr(i_address,'重庆市') > 0 then '重庆市'
		   
		   -- 盟是内蒙古特有, 地区则是 西藏和新疆									   
		   WHEN instr(i_address,'自治区') > 0 THEN case  when instr(i_address,'自治州') > 0 THEN substr(i_address, instr(i_address,'自治区') + 3, instr(i_address,'自治州')+3 - (instr(i_address,'自治区')+3))
		                                                 -- 确保是 盟名,而不是,镇,乡村,街道的名字,  即自治区和盟之间 没有其他 地级市级行政区的 名字, 市,地区
														 when instr(i_address,'盟') > 0
														  and instr(substr(i_address, instr(i_address,'自治区')+3,instr(i_address,'盟')+1 - (instr(i_address,'自治区')+3)),'市') = 0  
													      and instr(substr(i_address, instr(i_address,'自治区')+3,instr(i_address,'盟')+1 - (instr(i_address,'自治区')+3)),'地区') = 0 THEN substr(i_address, instr(i_address,'自治区') + 3, instr(i_address,'盟')+1 - (instr(i_address,'自治区')+3))
	                                                     -- 确保是 地区名,而不是,镇,乡村,街道的名字,  即自治区和地区之间 没有其他 地级市级行政区的 名字, 市,盟
														 when instr(i_address,'地区') > 0
														  and instr(substr(i_address, instr(i_address,'自治区')+3,instr(i_address,'地区')+2 - (instr(i_address,'自治区')+3)),'市') = 0  
													      and instr(substr(i_address, instr(i_address,'自治区')+3,instr(i_address,'地区')+2 - (instr(i_address,'自治区')+3)),'盟') = 0 THEN substr(i_address, instr(i_address,'自治区') + 3, instr(i_address,'地区')+2 - (instr(i_address,'自治区')+3))
	                                                    -- 确保是 地级市名,而不是,镇,乡村,街道的名字,  即自治区和市 之间 没有其他 地级市级行政区的 名字, 地区,盟
														 when instr(i_address,'市') > 0
														  and instr(substr(i_address, instr(i_address,'自治区')+3,instr(i_address,'市')+1 - (instr(i_address,'自治区')+3)),'地区') = 0  
													      and instr(substr(i_address, instr(i_address,'自治区')+3,instr(i_address,'市')+1 - (instr(i_address,'自治区')+3)),'盟') = 0 THEN substr(i_address,instr(i_address,'自治区') + 3, instr(i_address,'市')+1 - (instr(i_address,'自治区')+3))
												         else i_address
												  end
												  
	       WHEN instr(i_address,'省') > 0 THEN case when instr(i_address,'自治州') > 0 THEN substr(i_address,instr(i_address,'省') + 1, instr(i_address,'自治州')+3 - (instr(i_address,'省')+1))
	                                               -- 确保是 地区名,而不是,镇,乡村,街道的名字,  即省和地区之间 没有其他 地级市级行政区的 名字, 市
												   -- 地区 只有黑龙江省有
												   when instr(i_address,'地区') > 0 and instr(i_address,'省') > 0
												    and instr(substr(i_address, instr(i_address,'省')+1,instr(i_address,'地区')+2 - (instr(i_address,'省')+1)),'市') = 0 THEN substr(i_address,instr(i_address,'省') + 1, instr(i_address,'地区')+2 - (instr(i_address,'省')+1))            
												   -- 确保是 市名,而不是,镇,乡村,街道的名字,  即省和地区之间 没有其他 地区级行政区的 名字, 地区
												   when instr(i_address,'市') > 0 
												    and instr(substr(i_address, instr(i_address,'省')+1,instr(i_address,'市')+1 - (instr(i_address,'省')+1)),'地区') = 0 THEN substr(i_address,instr(i_address,'省') + 1, instr(i_address,'市')+1 - (instr(i_address,'省')+1))
												   else i_address
											  end
 
	  ELSE i_address
	  END city INTO p_city ;
   
  RETURN (p_city) ;
  EXCEPTION
     WHEN others THEN
     
	   GET STACKED DIAGNOSTICS text_var1 = RETURNED_SQLSTATE  ,
                               text_var2 = MESSAGE_TEXT  ,
                               text_var3 = PG_EXCEPTION_DETAIL;
	   RAISE NOTICE E'--- [ 已处理的异常代码_RETURNED_SQLSTATE ] : %', text_var1;    -- 记录异常信息
	   RAISE NOTICE E'--- [ 已处理的异常简要信息_MESSAGE_TEXT ] : %', text_var2;
	   RAISE NOTICE E'--- [ 已处理的异常详细信息_PG_EXCEPTION_DETAIL ] : %', text_var3;
       
	   RETURN ('') ;   -- 地址异常, 返回空
END $$
;

-------  获取县级  , 市辖区、县级市、县、自治县、旗、自治旗、特区、林区
-------  上级行政     直辖市,地级市,地区、自治州、盟

CREATE OR REPLACE FUNCTION dm.f_get_county(i_address character varying(500))
 RETURNS character varying
 LANGUAGE plpgsql
 STABLE NOT FENCED SHIPPABLE
AS $$
DECLARE
  p_county VARCHAR2(500);
  text_var1 text;
  text_var2 text;
  text_var3 text;
BEGIN
                                     
  SELECT 
	  CASE WHEN instr(i_address,'神农架林区') > 0 THEN  '神农架林区' 
	       WHEN instr(i_address,'六枝特区') > 0 THEN  '六枝特区'
		   
		   -- 如果是 北京市北京市xx区的格式	
		   WHEN instr(i_address,'北京市',1,2) > 0 then case when instr(i_address,'区') > 0 THEN substr(i_address,instr(i_address,'北京市',1,2) + 3, instr(i_address,'区') + 1 - (instr(i_address,'北京市',1,2) + 3))   
														else i_address	
												    end		 
		   -- 如果是 北京市xx区的格式										
           WHEN instr(i_address,'北京市') > 0 then case when instr(i_address,'区') > 0 THEN substr(i_address,instr(i_address,'北京市') + 3, instr(i_address,'区') + 1 - (instr(i_address,'北京市') + 3))             
														else i_address	
													end													
												
													
		   WHEN instr(i_address,'天津市',1,2) > 0 then case when instr(i_address,'区') > 0 THEN substr(i_address,instr(i_address,'天津市',1,2) + 3, instr(i_address,'区') + 1 - (instr(i_address,'天津市',1,2) + 3))   
														else i_address	
												    end		
		   WHEN instr(i_address,'天津市') > 0 then case when instr(i_address,'区') > 0 THEN substr(i_address,instr(i_address,'天津市') + 3, instr(i_address,'区') + 1 - (instr(i_address,'天津市') + 3))             
														else i_address	
                                                    end
																							
													
		   WHEN instr(i_address,'上海市',1,2) > 0 then case when instr(i_address,'区') > 0 THEN substr(i_address,instr(i_address,'上海市',1,2) + 3, instr(i_address,'区') + 1 - (instr(i_address,'上海市',1,2) + 3))   
														else i_address	
												    end	
           WHEN instr(i_address,'上海市') > 0 then case when instr(i_address,'区') > 0 THEN substr(i_address,instr(i_address,'上海市') + 3, instr(i_address,'区') + 1 - (instr(i_address,'上海市') + 3))             
														else i_address	
													end													
													
		   WHEN instr(i_address,'香港特别行政区') > 0 then case when instr(i_address,'区',1,2) > 0 THEN substr(i_address,instr(i_address,'香港特别行政区',1,2) + 7, instr(i_address,'区',1,2) + 1 - (instr(i_address,'香港特别行政区',1,2) + 7))   
														else i_address	
												    end		
													
		   WHEN instr(i_address,'澳门特别行政区') > 0 then case when instr(i_address,'区',1,2) > 0 THEN substr(i_address,instr(i_address,'澳门特别行政区',1,2) + 7, instr(i_address,'区',1,2) + 1 - (instr(i_address,'澳门特别行政区',1,2) + 7))   
														else i_address	
												    end	
														
		   WHEN instr(i_address,'重庆市',1,2) > 0 then case when instr(i_address,'自治县') > 0 THEN substr(i_address,instr(i_address,'重庆市',1,2) + 3, instr(i_address,'自治县') + 3 - (instr(i_address,'重庆市',1,2) + 3))		                                                											      
												        -- 确保是县级县名,而不是,镇,乡村,街道的名字, 即确保市和县之间 没有其他县级行政区的 名字, 区
													    when instr(i_address,'县') > 0
													    and  instr(substr(i_address, instr(i_address,'重庆市',1,2)+3,instr(i_address,'县')+1 - (instr(i_address,'重庆市',1,2)+3)),'区') = 0 THEN substr(i_address,instr(i_address,'重庆市',1,2) + 3, instr(i_address,'县') + 1 - (instr(i_address,'重庆市',1,2) + 3))
														-- 确保是县级区名,而不是,镇,乡村,街道的名字, 即确保市和区之间 没有其他县级行政区的 名字, 县
														when instr(i_address,'区') > 0 
														 and instr(substr(i_address, instr(i_address,'重庆市',1,2)+3,instr(i_address,'区')+1 - (instr(i_address,'重庆市',1,2)+3)),'县') = 0 THEN substr(i_address,instr(i_address,'重庆市',1,2) + 3, instr(i_address,'区') + 1 - (instr(i_address,'重庆市',1,2) + 3))             
														else i_address	
												    end
		   WHEN instr(i_address,'重庆市') > 0 then case when instr(i_address,'自治县') > 0 THEN substr(i_address,instr(i_address,'重庆市') + 3, instr(i_address,'自治县') + 3 - (instr(i_address,'重庆市') + 3))		                                                											      
												        -- 确保是县级县名,而不是,镇,乡村,街道的名字, 即确保市和县之间 没有其他县级行政区的 名字, 区
													    when instr(i_address,'县') > 0
													    and  instr(substr(i_address, instr(i_address,'重庆市')+3,instr(i_address,'县')+1 - (instr(i_address,'重庆市')+3)),'区') = 0 THEN substr(i_address,instr(i_address,'重庆市') + 3, instr(i_address,'县') + 1 - (instr(i_address,'重庆市') + 3))
														-- 确保是县级区名,而不是,镇,乡村,街道的名字, 即确保市和区之间 没有其他县级行政区的 名字, 县
														when instr(i_address,'区') > 0 
														 and instr(substr(i_address, instr(i_address,'重庆市')+3,instr(i_address,'区')+1 - (instr(i_address,'重庆市')+3)),'县') = 0 THEN substr(i_address,instr(i_address,'重庆市') + 3, instr(i_address,'区') + 1 - (instr(i_address,'重庆市') + 3))             
														else i_address	
												    end
													
														
           -- 内蒙古自治区 特有	( 目前下辖 旗,县级市,县)	   
		   WHEN instr(i_address,'盟') > 0 and instr(i_address,'内蒙古自治区') > 0 then 
		                                       case  when instr(i_address,'县') > 0
												      -- 确保是 县级县名,而不是,镇,乡村,街道的名字,  即地区和县之间 没有其他县级行政区的 名字, 市,旗
													  and instr(substr(i_address, instr(i_address,'盟')+1,instr(i_address,'县')+1 - (instr(i_address,'盟')+1)),'市') = 0  
													  and instr(substr(i_address, instr(i_address,'盟')+1,instr(i_address,'县')+1 - (instr(i_address,'盟')+1)),'旗') = 0 THEN substr(i_address,instr(i_address,'盟') + 1, instr(i_address,'县')+1 - (instr(i_address,'盟')+1))
													 -- 确保是 县级市名,而不是,镇,乡村,街道的名字,  即地区和县之间 没有其他县级行政区的 名字, 县,旗
													 when instr(i_address,'市') > 0
													  and instr(substr(i_address, instr(i_address,'盟')+1,instr(i_address,'市')+1 - (instr(i_address,'盟')+1)),'县') = 0  
													  and instr(substr(i_address, instr(i_address,'盟')+1,instr(i_address,'市')+1 - (instr(i_address,'盟')+1)),'旗') = 0 THEN substr(i_address,instr(i_address,'盟') + 1, instr(i_address,'市')+1 - (instr(i_address,'盟')+1))
													 -- 确保是 县级旗名,而不是,镇,乡村,街道的名字,  即地区和县之间 没有其他县级行政区的 名字, 县,市
													 when instr(i_address,'旗') > 0
													  and instr(substr(i_address, instr(i_address,'盟')+1,instr(i_address,'市')+1 - (instr(i_address,'盟')+1)),'市') = 0
                                                      and instr(substr(i_address, instr(i_address,'盟')+1,instr(i_address,'市')+1 - (instr(i_address,'盟')+1)),'县') = 0 THEN substr(i_address,instr(i_address,'盟') + 1, instr(i_address,'旗')+1 - (instr(i_address,'盟')+1))									 
												     else i_address
											    end
												
		   -- 黑龙江省和 西藏,新疆自治区  
		   -- 黑龙江省_(下辖 区,县,县级市), 区,县,县级市名 无其他行政等级名
           -- 自治区_(县,县级市,自治县), 县,县级市,自治县 并无其他行政等级名
		   WHEN instr(i_address,'地区') >0 THEN case when instr(i_address,'自治县') > 0 THEN substr(i_address,instr(i_address,'地区') + 2, instr(i_address,'自治县')+3 - (instr(i_address,'地区')+2))
		                                             -- 确保是 县级县名,而不是,镇,乡村,街道的名字,  即地区和县之间 没有其他县级行政区的 名字, 市,区
													 when  instr(i_address,'县') > 0
													   and instr(substr(i_address, instr(i_address,'地区')+2,instr(i_address,'县')+1 - (instr(i_address,'地区')+2)),'市') = 0  
													   and instr(substr(i_address, instr(i_address,'地区')+2,instr(i_address,'县')+1 - (instr(i_address,'地区')+2)),'区') = 0 THEN substr(i_address,instr(i_address,'地区') + 2, instr(i_address,'县')+1 - (instr(i_address,'地区')+2))
													 -- 确保是 县级市名,而不是,镇,乡村,街道的名字,  即地区和县级市之间 没有其他县级行政区的 名字, 县,区
													 when  instr(i_address,'市') > 0 
													   and instr(substr(i_address, instr(i_address,'地区')+2,instr(i_address,'市')+1 - (instr(i_address,'地区')+2)),'县') = 0  
													   and instr(substr(i_address, instr(i_address,'地区')+2,instr(i_address,'市')+1 - (instr(i_address,'地区')+2)),'区') = 0 THEN substr(i_address,instr(i_address,'地区') + 2, instr(i_address,'市')+1 - (instr(i_address,'地区')+2))
	                                                -- 确保是 县级区名,而不是,镇,乡村,街道的名字,  即地区和县级区之间 没有其他县级行政区的 名字, 县,市
   													 when instr(i_address,'区',1,2) > 0 and instr(i_address,'黑龙江省') > 0 
													  and instr(substr(i_address, instr(i_address,'地区')+2,instr(i_address,'区',1,2)+1 - (instr(i_address,'地区')+2)),'县') = 0  
													  and instr(substr(i_address, instr(i_address,'地区')+2,instr(i_address,'区',1,2)+1 - (instr(i_address,'地区')+2)),'市') = 0 THEN substr(i_address,instr(i_address,'地区') + 2, instr(i_address,'区',1,2)+1 - (instr(i_address,'地区')+2))
                                                     else i_address
											    end
		
		   -- 省 和 新疆自治区 (目前下辖,县,自治县,县级市)
	       WHEN instr(i_address,'自治州') > 0 THEN case when instr(i_address,'自治县') > 0 THEN substr(i_address,instr(i_address,'自治州') + 3, instr(i_address,'自治县')+3 - (instr(i_address,'自治州')+3))
	                                                    -- 确保是 县级县名,而不是,镇,乡村,街道的名字,  即地区和县之间 没有其他县级行政区的 名字, 市
													    when instr(i_address,'县') > 0
														 and instr(substr(i_address, instr(i_address,'自治州')+3,instr(i_address,'县')+1 - (instr(i_address,'自治州')+3)),'市') = 0 THEN substr(i_address,instr(i_address,'自治州') + 3, instr(i_address,'县')+1 - (instr(i_address,'自治州')+3))
														-- 确保是 县级市名,而不是,镇,乡村,街道的名字,  即地区和市之间 没有其他县级行政区的 名字, 县
														when instr(i_address,'市') > 0
														 and instr(substr(i_address, instr(i_address,'自治州')+3,instr(i_address,'市')+1 - (instr(i_address,'自治州')+3)),'县') = 0 THEN substr(i_address,instr(i_address,'自治州') + 3, instr(i_address,'市')+1 - (instr(i_address,'自治州')+3)) 
														else i_address
											    end
																					
		   WHEN instr(i_address,'市') > 0  THEN case when instr(i_address,'自治县') > 0 THEN substr(i_address,instr(i_address,'市') + 1, instr(i_address,'自治县')+3 - (instr(i_address,'市')+1))
												     when instr(i_address,'自治旗') > 0 and instr(i_address,'内蒙古自治区') > 0 THEN substr(i_address,instr(i_address,'市') + 1, instr(i_address,'自治旗')+3 - (instr(i_address,'市')+1))
          		                                    -- 确保是县级旗名,而不是,镇,乡村,街道的名字, 即确保市和旗之间 没有其他县级行政区的 名字, 市,县,区
													when instr(i_address,'旗') > 0 and instr(i_address,'内蒙古自治区') > 0 
													and  instr(substr(i_address, instr(i_address,'市')+1,instr(i_address,'旗') - instr(i_address,'市')),'市') = 0 
													and  instr(substr(i_address, instr(i_address,'市')+1,instr(i_address,'旗') - instr(i_address,'市')),'县') = 0 
													and  instr(substr(i_address, instr(i_address,'市')+1,instr(i_address,'旗') - instr(i_address,'市')),'区') = 0 THEN substr(i_address,instr(i_address,'市') + 1, instr(i_address,'旗')+1 - (instr(i_address,'市')+1))    
												    -- 确保是县级县名,而不是,镇,乡村,街道的名字, 即确保市和县之间 没有其他县级行政区的 名字, 市,区 ,旗
													when instr(i_address,'县') > 0 
													 and instr(substr(i_address, instr(i_address,'市')+1,instr(i_address,'县') - instr(i_address,'市')),'市') = 0  
													 and instr(substr(i_address, instr(i_address,'市')+1,instr(i_address,'县') - instr(i_address,'市')),'区') = 0 
													 and instr(substr(i_address, instr(i_address,'市')+1,instr(i_address,'县') - instr(i_address,'市')),'旗') = 0 THEN substr(i_address,instr(i_address,'市') + 1, instr(i_address,'县')+1 - (instr(i_address,'市')+1))
													 
    												when instr(i_address,'辉县市') > 0 THEN '辉县市'
													-- 确保是县级市名,而不是,镇,乡村,街道的名字, 即确保市和市之间 没有其他县级行政区的 名字, 区 ,县 旗
													when instr(i_address,'市',1,2) > 0 
													 and instr(substr(i_address, instr(i_address,'市',1,1)+1,(instr(i_address,'市',1,2)-instr(i_address,'市'))),'区') = 0 
													 and instr(substr(i_address, instr(i_address,'市',1,1)+1,(instr(i_address,'市',1,2)-instr(i_address,'市'))),'县') = 0 
													 and instr(substr(i_address, instr(i_address,'市',1,1)+1,(instr(i_address,'市',1,2)-instr(i_address,'市'))),'旗') = 0 THEN substr(i_address,instr(i_address,'市',1,1) + 1, instr(i_address,'市',1,2)+1 - (instr(i_address,'市',1,1)+1))
	                                                -- 确保是县级区名(自治区),而不是,镇,乡村,街道的名字, 即确保市和区之间 没有其他县级行政区的 名字, 县 旗,市
													when instr(i_address,'自治区') > 0 and instr(i_address,'区',1,2)  > 0 
													 and instr(substr(i_address, instr(i_address,'市')+1,(instr(i_address,'区',1,2)-instr(i_address,'市'))),'市') = 0 
													 and instr(substr(i_address, instr(i_address,'市')+1,(instr(i_address,'区',1,2)-instr(i_address,'市'))),'县') = 0 
													 and instr(substr(i_address, instr(i_address,'市')+1,(instr(i_address,'区',1,2)-instr(i_address,'市'))),'旗') = 0 THEN substr(i_address,instr(i_address,'市') + 1, instr(i_address,'区',1,2)+1 - (instr(i_address,'市')+1))
													-- 确保是县级区名(省),而不是,镇,乡村,街道的名字, 即确保市和区之间 没有其他县级行政区的 名字, 县 旗,市
													when instr(i_address,'省') > 0 and instr(i_address,'区') and instr(i_address,'自治区') = 0
													 and instr(substr(i_address, instr(i_address,'市')+1,(instr(i_address,'区')-instr(i_address,'市'))),'市') = 0 
													 and instr(substr(i_address, instr(i_address,'市')+1,(instr(i_address,'区')-instr(i_address,'市'))),'县') = 0 
													 and instr(substr(i_address, instr(i_address,'市')+1,(instr(i_address,'区')-instr(i_address,'市'))),'旗') = 0 THEN substr(i_address,instr(i_address,'市') + 1, instr(i_address,'区')+1 - (instr(i_address,'市')+1))
												    else i_address
											    end
	  ELSE i_address
	  END county INTO p_county ;
   
  RETURN (p_county) ;
  EXCEPTION
     WHEN others THEN
     
	   GET STACKED DIAGNOSTICS text_var1 = RETURNED_SQLSTATE  ,
                               text_var2 = MESSAGE_TEXT  ,
                               text_var3 = PG_EXCEPTION_DETAIL;
	   RAISE NOTICE E'--- [ 已处理的异常代码_RETURNED_SQLSTATE ] : %', text_var1;    -- 记录异常信息
	   RAISE NOTICE E'--- [ 已处理的异常简要信息_MESSAGE_TEXT ] : %', text_var2;
	   RAISE NOTICE E'--- [ 已处理的异常详细信息_PG_EXCEPTION_DETAIL ] : %', text_var3;
       
	   RETURN ('') ;   -- 地址异常, 返回空
END $$
;
相关推荐
像风一样!35 分钟前
MySQL数据库如何实现主从复制
数据库·mysql
大白的编程日记.39 分钟前
【MySQL】数据库表的CURD(二)
android·数据库·mysql
友善的鸡蛋1 小时前
项目中执行SQL报错oracle.jdbc.OracleDatabaseException: ORA-00942: 表或视图不存在
数据库·sql·oracle
The best are water1 小时前
jeesite mybatis添加拦截器,推送指定表的变更数据到其他数据库
数据库·mybatis
api_180079054601 小时前
异步数据采集实践:用 Python/Node.js 构建高并发淘宝商品 API 调用引擎
大数据·开发语言·数据库·数据挖掘·node.js
怕什么真理无穷2 小时前
mysql server 9.4 windows安装教程(sqlyog 下载)
数据库
Olrookie2 小时前
MySQL运维常用SQL
运维·数据库·sql·mysql·dba
数据库生产实战2 小时前
ORACLE 19C ADG环境 如何快速删除1.8TB的分区表?有哪些注意事项?
数据库·oracle
blackorbird2 小时前
使用 Overpass Turbo 查找监控摄像头
运维·服务器·数据库·windows
IT永勇2 小时前
SQLite数据库基本操作
数据库·sqlite·嵌入式开发·增删改查·关系型数据库