日期:2014-05-18  浏览次数:20469 次

我发个字符截取的帖子,
 
  a b
  1 1111广东省23455嘎嘎嘎镇DKSKL
  2 KSKSKAKL什么的镇12345678
  3 上海市JJ镇


我要抓出镇名 也就是

  a b
  1 嘎嘎嘎镇
  2 什么的镇
  3 JJ镇

因为没有县名,想从县名+1下手都不行了,镇名的长度不一样+2也不行。求高手了。

------解决方案--------------------
其实很简单的,这种东西先按需求来
最终要获得的是select a,b,GetTown(b) from tb
那么开始就要写个GetTown函数
首先获取'镇'的位置
然后前面那段哪些是不要的呢?按人的逻辑,结合数据一看,有如下几种:
1。到了‘市’
2。遇到了字母
3。遇到了数字
那还不容易写吗?
SQL code

create function GetTown(@name nvarchar(max))
returns nvarchar(max)
begin
declare @i int
set @i=2
          set @name=substring(@name,1,charindex('镇',@name,1))
      while @i<len(@name)
         if substring(reverse(@name),@i,1) like '[0-9]' 
         or substring(reverse(@name),@i,1) like '[a-z]' 
         or substring(reverse(@name),@i,1) = '市'
            return (@name)
         else
            set @name=stuff(...)
...
...
...
end