您的位置:首页 > 数据库

SQL SERVER 全角和半角的解决方法

2010-05-12 03:34 267 查看

SQL SERVER 全角和半角的解决方法

[align=right]from :http://kangbin.javaeye.com/blog/368574[/align] 今天在开发项目当中遇到了一个非常郁闷的问题,导致我的更新总是屡屡失败,数字全角半角的问题

update corptax

set corptax.mandep = c.SALECOMPANY
from corptax t,collection c
where t.INVOICECODE = c.invoicecode and cast(t.invoiceno as int(8)) between c.BEGINCODE and c.ENDCODE

corptax 表中的 invoiceno 是一个varchar(50)的,其实实际上这个字段保存的是(0-9)8位数字,用别人的表只能自己解决了,invoiceno在数据库中的错误记录如 下:



00412051
02155331

等等……

解决方法,自定一个用户函数:去替换掉里面的全角字符

CREATE FUNCTION shasha (@fphm varchar(50))
RETURNS varchar(8)
AS
BEGIN
SET @fphm = replace(@fphm,' ','');
SET @fphm = replace(@fphm,'0','0');
SET @fphm = replace(@fphm,'1','1');
SET @fphm = replace(@fphm,'2','2');
SET @fphm = replace(@fphm,'3','3');
SET @fphm = replace(@fphm,'4','4');
SET @fphm = replace(@fphm,'5','5');
SET @fphm = replace(@fphm,'6','6');
SET @fphm = replace(@fphm,'7','7');
SET @fphm = replace(@fphm,'8','8');
SET @fphm = replace(@fphm,'9','9');
RETURN(@fphm)
END

之后用sql 语句更新就可以了

update corptax set invoiceno = dbo.shasha(invoiceno) where ASCII(SUBSTRING(invoiceno,1,1))>57

where 后面条件的意思是如果取到的第一个数字的ascii不在(0-9)之内,0的ascii码为48, 9的ascii为57.全角的ascii码大于半角的ascii码,这样所有全角的记录就被更新成半角了。

希望我们每个人都能用心去解决自己遇到的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: