日期:2014-05-17  浏览次数:20540 次

如何sql server 获取第二个‘-’左右俩边值?
本帖最后由 poppin19 于 2013-04-03 11:53:00 编辑
有个字符串字段格式如下,如何获取第二个‘-’左边的值和右边的值?

字段
B10-1-40
B10-1-5
B10-1-6
B10-1-7

------解决方案--------------------
左边的值:LEFT(档案号, 5)
右边的值:SUBSTRING(档案号, 7,6) 第二个数字大雨或等于右边的数值宽度
------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (col nvarchar(16))
insert into [TB]
select 'B10-1-40' union all
select 'B10-1-5' union all
select 'B10-1-6' union all
select 'B10-1-7'

select * from [TB]


SELECT  PARSENAME(REPLACE(col, '-', '.'), 3) ,
        PARSENAME(REPLACE(col, '-', '.'), 2) ,
        PARSENAME(REPLACE(col, '-', '.'), 1)
FROM    dbo.TB

/*
(无列名) (无列名) (无列名)
B10 1 40
B10 1 5
B10 1 6
B10 1 7*/

------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (col nvarchar(16))
insert into [TB]
select 'B10-1-40' union all
select 'B10-1-5' union all
select 'B10-1-6' union all
select 'B10-1-7'

select *,
stuff(col,1,charindex('-',col,charindex('-',col)+1),'') from [TB]
/*
B10-1-40         40
B10-1-5          5
B10-1-6          6
B10-1-7          7

(所影响的行数为 4 行)