if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([col] varchar(16))
insert [tb]
select '中国_哈尔滨_aaa' union all
select '加拿大_温哥华_bb' union all
select '朝鲜_汉城_cccc'select * from [tb]select substring(col,charindex('_',col)+1,charindex('_',right(col,len(col)-charindex('_',col)))-1)
from tb
/*
------
哈尔滨
温哥华
汉城
*/
select right(col,charindex('_',reverse(col))-1)
from tb
/*
-----
aaa
bb
cccc
*/
go
create table [tb]([col] varchar(16))
insert [tb]
select '中国_哈尔滨_aaa' union all
select '加拿大_温哥华_bb' union all
select '朝鲜_汉城_cccc'select * from [tb]select substring(col,charindex('_',col)+1,charindex('_',right(col,len(col)-charindex('_',col)))-1)
from tb
/*
------
哈尔滨
温哥华
汉城
*/
select right(col,charindex('_',reverse(col))-1)
from tb
/*
-----
aaa
bb
cccc
*/
insert into tb select '中国_哈尔滨_AAA'
insert into tb select '加拿大_温哥华_BB'
insert into tb select '朝鲜_汉城_CCCC'
--1
select s,substring(s,charindex('_',s)+1,len(s)-charindex('_',reverse(s))-charindex('_',s))from tb
--2
select s,right(s,charindex('_',reverse(s))-1) from tbs s2
中国_哈尔滨_AAA 哈尔滨
加拿大_温哥华_BB 温哥华
朝鲜_汉城_CCCC 汉城
s s2
中国_哈尔滨_AAA AAA
加拿大_温哥华_BB BB
朝鲜_汉城_CCCC CCCC
drop table [tb]
go
create table [tb]([col] varchar(16))
insert [tb]
select '中国_哈尔滨_aaa' union all
select '加拿大_温哥华_bb' union all
select '朝鲜_汉城_cccc'
select cast(parsename(replace(col, '_', '.'),2) as varchar(32))
, cast(parsename(replace(col, '_', '.'),1) as varchar(32))
from tb
/*
(3 行受影响)
-------------------------------- --------------------------------
哈尔滨 aaa
温哥华 bb
汉城 cccc(3 行受影响)
*/
create function dbo.MidString (@string nvarchar(100))
returns nvarchar(100)
as
begin
declare @rtn nvarchar(100)
declare @split1 tinyint
declare @split2 tinyint
set @split1=charindex('_',@string)+1
set @split2=charindex('_',@string,@split1)
return substring(@string,@split1,@split2-@split1)
endcreate function dbo.LastString (@string nvarchar(100))
returns nvarchar(100)
as
begin
declare @rtn nvarchar(100)
declare @split1 tinyint
declare @split2 tinyint
set @split1=charindex('_',@string)
set @string=stuff(@string,@split1,1,'')
set @split2=charindex('_',@string)
return stuff(@string,1,@split2,'')
end示例代码:
select dbo.MidString(字符字段)--得到中间部分字符串
select dbo.LastString(字符字段)--得到后部分字符串