用户在中文状态下,全角输入 小张,半角下输入 小张,系统会认为是不同的,这个问题如何解决?

解决方案 »

  1.   

    --1.查询区分全角与半角字符
    --测试数据
    DECLARE @t TABLE(col varchar(10))
    INSERT @t SELECT 'aa'
    UNION ALL SELECT 'Aa'
    UNION ALL SELECT 'AA'   --全角A
    UNION ALL SELECT 'A,A' --全角A,半角逗号(,)
    UNION ALL SELECT 'A,A' --全角A,全角逗号(,)--1.查大写字母
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%A%'--2.查全角字母
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%A%'--3.查半角逗号(,)
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%,%'--3.查全角逗号(,)
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%,%'
    GO
    /*=============================================*/
      

  2.   

    --2 实现全角与半角字符转换的处理函数
    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
      

  3.   


    挺好不过这我得提前知道他使用全角输入的哦~~~关键在于我也不清楚她会不会使用什么角输入呢~~~不过如果我在前台使用c#的函数ToString之类的转换之后是不是就可以解决了???