想在sqlserver中写一个全角半角转换函数,却发现全角数字的ascii码都一样,有点麻烦了,各位,支点招 吧!!!!!

解决方案 »

  1.   

    全角数字的编码是两位的,例如:
    declare @s varchar(20)
    set @s = '1234567890'
    declare @b varbinary(20)
    set @b = cast(@s as varbinary)
    select @b--0xA3B1A3B2A3B3A3B4A3B5A3B6A3B7A3B8A3B9A3B0
      

  2.   

    全角数字的ascii码都一样 ???少取一位吧
      

  3.   

    dulei115() 已经说得很清楚了
      

  4.   

    declare @s nvarchar(10)
    set @s = '1234567890'
    declare @result varchar(10)
    set @result = ''
    while len(@s) > 0
    begin
      set @result = @result + char(unicode(@s) - unicode('0') + ascii('0'))
      set @s = right(@s, len(@s) - 1)
    end
    select @result  --'1234567890'注意:
    unicode('0')的结果不是oxA3B0而是0xFF10,因为这个函数是按照Unicode 标准来转换的
      

  5.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_convert]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_convert]
    GO/*--全角/半角转换转换说明
    全角字符从的unicode编码从65281~65374
    半角字符从的unicode编码从   33~126
    空格比较特殊,全角为 12288,半角为 32
    而且除空格外,全角/半角按unicode编码排序在顺序上是对应的
    所以可以直接通过用+-法来处理非空格数据,对空格单独处理
    like的时候,指定排序规则 COLLATE Latin1_General_BIN
    是保证字符顺序按unicode编码排序
    (此函数部分思路参考了CSDN上大力的转换函数)
    --邹建 2005.01(引用请保留此信息)--*//*--调用示例 declare @s1 varchar(8000)
    select @s1='中  2-3456a78STUVabn中国opwxyz'
    select dbo.f_convert(@s1,0),dbo.f_convert(@s1,1)
    --*/
    CREATE FUNCTION f_Convert(
    @str NVARCHAR(4000), --要转换的字符串
    @flag bit            --转换标志,0转换成半角,1转换成全角
    )RETURNS nvarchar(4000)
    AS
    BEGIN
    DECLARE @pat nvarchar(8),@step int,@i int,@spc int
    IF @flag=0
    SELECT @pat=N'%[!-~]%',@step=-65248,
    @str=REPLACE(@str,N' ',N' ')
    ELSE
    SELECT @pat=N'%[!-~]%',@step=65248,
    @str=REPLACE(@str,N' ',N' ')
    SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
    WHILE @i>0
    SELECT @str=REPLACE(@str,
    SUBSTRING(@str,@i,1),
    NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
    ,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
    RETURN(@str)
    END
    GO
      

  6.   

    ==================================
    =  CSDN助手 全面支持CSDN论坛     =
    =  监视、收藏、历史、签名走马灯  =
    ==================================
      

  7.   

    最简单的做法是
    update table set field1=replace (field1,'6','6')
    如此将要转换的全角字符全部定义在替换的位置,直接一次全部换掉
    不过要查询指定的全角字符还是比较麻烦,不知是否有高手能做到
    感谢上面的高手指点
      

  8.   

    为什么调用函数前面要加dbo 权限?
      

  9.   

    查看sql联机帮助,拥有该用户定义函数的用户 ID 的名称。owner_name 必须是现有的用户 ID。