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

求解一个SQL截取字符串的问题
User表中UserName字段是如下内容格式:
超级管理员是领导
管理员是领导
审计员是领导
高华是领导
傅平是领导
胡平是领导
赵泉灿是领导
贺明是是领导
……

-------------------------------
请问:如何操作可以将UserName字段中的后面三个字“是领导”去掉?
最终我要的结果是:
超级管理员
管理员
审计员
高华
傅平
胡平
赵泉灿
贺明是
……

------解决方案--------------------
update [user] set username=replace(username,'是领导','')

------解决方案--------------------
update的我就不写了
----------------------------
-- Author  :DBA_Huangzj(发粪涂墙)
-- Date    :2013-01-05 23:23:42
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
-- Jun 17 2011 00:57:23 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[user]
if object_id('[user]') is not null drop table [user]
go 
create table [user]([UserName] varchar(16))
insert [user]
select '超级管理员是领导' union all
select '管理员是领导' union all
select '审计员是领导' union all
select '高华是领导' union all
select '傅平是领导' union all
select '胡平是领导' union all
select '赵泉灿是领导' union all
select '贺明是是领导'
--------------开始查询--------------------------

select SUBSTRING([UserName],1,PATINDEX('%是领导%',[UserName])-1) from [user]
----------------结果----------------------------
/*
----------------
超级管理员
管理员
审计员
高华
傅平
胡平
赵泉灿
贺明是

(8 行受影响) 
*/

------解决方案--------------------
create table tb([UserName] varchar(16))
insert tb
select '超级管理员是领导' union all
select '管理员是领导' union all
select '审计员是领导' union all
select '高华是领导' union all
select '傅平是领导' union all
select '胡平是领导' union all
select '赵泉灿是领导' union all
select '贺明是是领导'
go
update tb set username=replace(username,'是领导','')
select * from tb
/*
UserName
----------------
超级管理员
管理员
审计员
高华
傅平
胡平
赵泉灿
贺明是

(8 行受影响)

*/
go
drop table tb

------解决方案--------------------
select left([UserName],charindex('是领导',[UserName])-1) from tb
------解决方案--------------------

create table tb([UserName] varchar(16))
insert tb
select '超级管理员是领导' union all
select '管理员是领导' union all
select '审计员是领导' union all
select '高华是领导' union all
select '傅平是领导' union all
select '胡平是领导' union all
select '赵泉灿是领导' union all
select '贺明是领导'
go

select replace(username,'是领导','') from tb
--------------------------