龙岗网站建设推广,上海免费建站模板,淘宝网站是哪个公司做的,响应式网站有哪些2017地址格式为#xff1a; 省(自治区#xff0c;直辖市)、市、区。
直辖市的地址格式为#xff0c; 北京市北京市海淀区xxxxx。 若是北京市海淀区xxx#xff0c;自己改改就可以了
采用的是笨办法#xff0c;穷举。
涉及的两个主要内置函数。
1. instr( start_positio…地址格式为 省(自治区直辖市)、市、区。
直辖市的地址格式为 北京市北京市海淀区xxxxx。 若是北京市海淀区xxx自己改改就可以了
采用的是笨办法穷举。
涉及的两个主要内置函数。
1. instr( start_position ,str1 , str2 , times) 。
查找str2在str1出现的位置。num是出现的次数默认是1。例如num2就是str2在str1第二次出现的位置。start_position是起始的位置下标默认是从头开始即 1。
若str2在str1找不到则返回0
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_position2 length3 str1 ‘’12345678‘’
substr(123456, 2, 3) -- 结果是 234. 因为postgres是下标索引是1开始substr(123456, 1, 3) -- 结果是 123. 因为postgres是下标索引是1开始
substr(123456, 0, 3) -- 结果是 123. 0也当成1substr(123456, 2) -- 结果是 23456. 长度值不填默认就是截取到最右边substr(新疆维吾尔族自治区,1 ,instr(新疆维吾尔族自治区,自治区))
-- substr(新疆维吾尔族自治区,1 , 7)
-- 新疆维吾尔族自substr(新疆维吾尔族自治区,1 ,instr(新疆维吾尔族自治区,自治区)2)
-- substr(新疆维吾尔族自治区,1 , 72)
-- 新疆维吾尔族自治区
3. 省市区解析函数 CREATE OR REPLACE FUNCTION dm.f_get_province(i_address character varying(500))RETURNS character varyingLANGUAGE plpgsqlSTABLE NOT FENCED SHIPPABLE -- DWS特有的如果你是postgres就不用
AS $$
DECLAREp_province VARCHAR2(500);text_var1 text;text_var2 text;text_var3 text;
BEGINSELECT 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_addressEND PROVINCE INTO p_province ;RETURN (p_province) ;EXCEPTIONWHEN others THENGET 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 varyingLANGUAGE plpgsqlSTABLE NOT FENCED SHIPPABLE
AS $$
DECLAREp_city VARCHAR2(500);text_var1 text;text_var2 text;text_var3 text;
BEGINSELECT CASE WHEN instr(i_address,特别行政区) 0 THEN case when instr(i_address,香港特别行政区) 0 THEN 香港特别行政区when instr(i_address,澳门特别行政区) 0 THEN 澳门特别行政区else i_addressendWHEN 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,盟) 0and 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,地区) 0and 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,市) 0and 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_addressendWHEN 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,省) 0and 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_addressendELSE i_addressEND city INTO p_city ;RETURN (p_city) ;EXCEPTIONWHEN others THENGET 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 varyingLANGUAGE plpgsqlSTABLE NOT FENCED SHIPPABLE
AS $$
DECLAREp_county VARCHAR2(500);text_var1 text;text_var2 text;text_var3 text;
BEGINSELECT 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 endWHEN 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,县) 0and 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 endWHEN 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,县) 0and 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,市) 0and 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,旗) 0and instr(substr(i_address, instr(i_address,盟)1,instr(i_address,市)1 - (instr(i_address,盟)1)),市) 0and 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_addressend-- 黑龙江省和 西藏新疆自治区 -- 黑龙江省_(下辖 区县县级市) 区县县级市名 无其他行政等级名-- 自治区_县县级市自治县 县县级市自治县 并无其他行政等级名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,县) 0and 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_addressend-- 省 和 新疆自治区 (目前下辖县自治县县级市)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,县) 0and 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,市) 0and 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_addressendWHEN 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,自治区) 0and 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_addressendELSE i_addressEND county INTO p_county ;RETURN (p_county) ;EXCEPTIONWHEN others THENGET 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 $$
;