zoukankan      html  css  js  c++  java
  • SQL SERVER 全角和半角的解决方法

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

    from :http://kangbin.javaeye.com/blog/368574

    今天在开发项目当中遇到了一个非常郁闷的问题,导致我的更新总是屡屡失败,数字全角半角的问题

    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码,这样所有全角的记录就被更新成半角了。

    希望我们每个人都能用心去解决自己遇到的问题。

  • 相关阅读:
    python3.6 range() 函数
    常见文件头,文件尾总结。
    pycharm多行代码注释,或取消。
    php设计模式之命令模式
    php设计模式之工厂模式
    php设计模式之观察者模式
    SQLServer导出sql文件,导出表架构和数据
    vs2012建设网站,IIS8发布
    Subsonic 配置文件
    去掉txt中的重复标题
  • 原文地址:https://www.cnblogs.com/no7dw/p/1733125.html
Copyright © 2011-2022 走看看