日期:2014-05-19  浏览次数:20713 次

数据库问题,急救
我现在数据库里有字段数据如下:
计算机事业部030120
计算机事业部030130
计算机事业部040020
计算机事业部040140
金蝶事业部20400
计算机事业部040030
我怎样把中文后的数字去掉

------解决方案--------------------

/*
利用正则表达式替换字符
调用:

1.获取字符串中的英文字符
declare @str varchar(100)
set @str= 'xyz123z5 '
select dbo.regexReplace(@str, '[0-9] ', ' ',1,1)

*/
create function dbo.regexReplace
(
@source varchar(5000), --原字符串
@regexp varchar(1000), --正则表达式
@replace varchar(1000), --替换值
@globalReplace bit = 0, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @result varchar(5000)

exec @hr = sp_OACreate 'VBScript.RegExp ', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern ', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global ', @globalReplace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase ', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'Replace ', @result OUTPUT, @source, @replace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end

return @result
end
GO


------解决方案--------------------
create table tab
(
con varchar(50)
)

insert into tab select '计算机事业部030120 '
insert into tab select '计算机事业部030130 '
insert into tab select '计算机事业部040020 '
insert into tab select '计算机事业部040140 '
insert into tab select '金蝶事业部20400 '
insert into tab select '计算机事业部040030 '

--语句
select left(con,patindex( '%[0-9]% ',con)-1) from tab

--结果
计算机事业部
计算机事业部
计算机事业部
计算机事业部
金蝶事业部
计算机事业部
------解决方案--------------------
--更新

update tab set con = left(con,patindex( '%[0-9]% ',con)-1)

--select * from tab
计算机事业部
计算机事业部
计算机事业部
计算机事业部
金蝶事业部
计算机事业部
------解决方案--------------------
只清除部门末尾的数字,不清除部门中的数字:
declare @t table(name varchar(50))
insert @t
select '计算机事业部030120 ' union all
select '计算机事业部030130 ' union all
select '计算机事业部040020 ' union all
select '计算机事业部040140 ' union all
select '金蝶事业部20400 ' union all
select '计算机事业部040030 '

select substring(name,1,len(name)-patindex( '%[^0-9]% ',reverse(name)) + 1)
from @t

/*结果
计算机事业部
计算机事业部
计算机事业部
计算机事业部
金蝶事业部
计算机事业部
*/