用规则可以吧,或用trigger --> substring

解决方案 »

  1.   

    这个不用什么原代码吧.
    建一个对照表t(因为它们毕竟不是一一对应的)
    qj   bj
    ,     ,
    .     。
    !     !然后用一条语句,replace()函数不就可以了?
      

  2.   

    teaism说得没错。就得列举。如果只是字母、数字和常见字符,还是容易的。事实上,其他的字符比方说制表符、日文、三角形等也没法参照。
      

  3.   

    将常用半角转化为全角:
    select nchar(65248+unicode('半角字符'))
    将常用全角转化为半角:
    select nchar(unicode('全角字符') - 65248)
      

  4.   

    全角转半角:(S_SHOW)
    Declare @p nvarchar(200)
    Declare @idx int
    Declare @ret varchar(200) 
    set @p=N'1234567。890'
    SET @ret=''
    Set @idx=1
    WHILE SUBSTRING(@p,@idx,1)<>'' 
        BEGIN 
            SET @ret=@ret+NCHAR(UNICODE(SUBSTRING(@p,@idx,1))-CASE WHEN SUBSTRING(@p,@idx,1)='。' THEN 12244 ELSE  65248 END )
            SET @idx=@Idx+1
         END
    SELECT @ret
      

  5.   

    半角转全角
    Declare @p nvarchar(200)
    Declare @idx int
    Declare @ret Nvarchar(200) --set @p=N'1234567。890'
    set @p=N'1234567.890'
    SET @ret=''
    Set @idx=1
    WHILE SUBSTRING(@p,@idx,1)<>'' 
        BEGIN 
            SET @ret=@ret+NCHAR(UNICODE(SUBSTRING(@p,@idx,1))+CASE WHEN SUBSTRING(@p,@idx,1)='.' THEN 12244 ELSE 65248 END )
            SET @idx=@Idx+1
         ENDSELECT @ret
      

  6.   

    declare @a varchar(1000),@b varchar(1000)
    select @a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+0123456789.:";''<>?,.{}|[]\'
    set @b=''
    while @a<>''
    begin 
    set @b=@b+nchar(unicode(left(@a,1))+65248)
    print @b
    set @a=substring(@a,2,1000)
    endselect @bresult:
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+0123456789.:";'<>?,.{}|[]\主要是全角UBICODE字符集和半角不是一一对应的,不好转。普通的好办。
      

  7.   

    三位的写法我都仔细看了,可以解决我开始提的问题(即转换),但是如何能够事先判断一个字符是否全角或者半角呢,当一个字符串既有全角有半角字符的时候如何去将整个字符串转换为全角或者半角呢?特别是leimin(黄山光明顶)全角转半角的程序,当其中含有一个半角字符,比如:set @p=N'123457890'返回的就是null值了,怎么办?能否继续帮助我呢?请teaism() Chiff(~o~) 和 leimin(黄山光明顶)多费心了啊
      

  8.   

    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+0123456789.:";''<>?,.{}|[]\'
    unicode 在33--126之间,对应全角在65281-65374之间所以:
    declare @a nvarchar(1000),@b nvarchar(1000)
    select @a=N'123457890'
    set @b=''
    while @a<>''
    begin 
    set @b=@b+case when unicode(left(@a,1)) between 65281 and 65374 
                   then left(@a,1) 
                   else nchar(unicode(left(@a,1))+65248) 
              end
    set @a=substring(@a,2,1000)
    endselect @b
      

  9.   

    上面那个有BUG,改如下:
    declare @a nvarchar(1000),@b nvarchar(1000)
    select @a=N'123457890'
    set @b=''
    while @a<>''
    begin 
    set @b=@b+case when unicode(left(@a,1)) between 33 and 126 
                   then nchar(unicode(left(@a,1))+65248) 
                   else left(@a,1) 
              end
    set @a=substring(@a,2,1000)
    endselect @b
      

  10.   

    create function 全半角 (@str Nvarchar(4000),@flag nchar(4))
    returns nvarchar(4000)
    as
    begin
      declare @ nvarchar(4000)
      set @=N''
      if @flag=N'全角'
        while @str<>N''
          select @=@+case when unicode(left(@str,1)) between 33 and 126 then nchar(unicode(left(@str,1))+65248) else left(@str,1) end,@str=substring(@str,2,4000)
      else
        while @str<>N''
          select @=@+case when unicode(left(@str,1)) between 65281 and 65374 then nchar(unicode(left(@str,1))-65248) else left(@str,1) end,@str=substring(@str,2,4000)
      return @
    end
    go
    select dbo.全半角(N'12453ga的sd(a4ss57890','全角')select dbo.全半角(N'12453ga的s(da4ss57890','半角')godrop function 全半角
      

  11.   

    大力的方法很好!
    STUDY :-)