trywhere ID = N'2ς**' 

解决方案 »

  1.   

    where id = N'2ς**' 
      

  2.   


    CREATE TABLE TBTEST(ID VARCHAR(10))
    INSERT TBTEST VALUES('AFD2ς**')
    INSERT TBTEST VALUES('2FDς**')
    INSERT TBTEST VALUES('FDRE2ς**')
    INSERT TBTEST VALUES('2ςFD**')
    INSERT TBTEST VALUES('2ς**FD')
    INSERT TBTEST VALUES('2ς*FD*')
    INSERT TBTEST VALUES('24546564**')SELECT * FROM TBTEST WHERE CHARINDEX('ς',ID)>0
    /*ID         
    ---------- 
    AFD2?**
    2FD?**
    FDRE2?**
    2?FD**
    2?**FD
    2?*FD*(所影响的行数为 6 行)*/
      

  3.   

    用REPLACE 试试,将里面的特殊字符用空格代替,查询条件里也用空格代替!!
      

  4.   

    9楼的测试根本就不对。首先,ς这个字符,不被中文字符集所支持, 所以在中文操作系统上安装的sqlserver如果用默认排序规则chinese_rpc...,且用text,char,varchar之类数据类型,那么写入ς这个字符时,写入就是乱码。9楼自己可以试一下,
    SELECT * FROM TBTEST WHERE CHARINDEX('?',ID)>0
    是不是跟你上面那句查到的结果一样?
    楼主要想查到正确的结果, 做法无非两种:1,存储数据时,不考滤排序规则,但用unicode方式编码,即字段用nvarchar,nchar,ntext之类,赋值时加N前辍,比如:
    CREATE TABLE TBTEST(ID NVARCHAR(10))
    INSERT TBTEST VALUES(N'AFD2ς**')
    INSERT TBTEST VALUES(N'2FDς**')
    INSERT TBTEST VALUES(N'FDRE2ς**')
    INSERT TBTEST VALUES(N'2ςFD**')
    INSERT TBTEST VALUES(N'2ς**FD')
    INSERT TBTEST VALUES(N'2ς*FD*')
    INSERT TBTEST VALUES(N'24546564**')SELECT * FROM TBTEST WHERE CHARINDEX(N'ς',ID)>0/*
    AFD2ς**
    2FDς**
    FDRE2ς**
    2ςFD**
    2ς**FD
    2ς*FD**/DROP TABLE TBTEST
    2,方法2,建表时及查询时,指定支持这个字符ς的排序规则。这个字符,是希腊字符,所以指定Greek排序规则即可。如CREATE TABLE TBTEST(ID VARCHAR(10) COLLATE Greek_CI_AI)
    INSERT TBTEST VALUES('AFD2ς**')
    INSERT TBTEST VALUES('2FDς**')
    INSERT TBTEST VALUES('FDRE2ς**')
    INSERT TBTEST VALUES('2ςFD**')
    INSERT TBTEST VALUES('2ς**FD')
    INSERT TBTEST VALUES('2ς*FD*')
    INSERT TBTEST VALUES('24546564**')SELECT * FROM TBTEST WHERE CHARINDEX('ς' COLLATE Greek_CI_AI,ID)>0/*
    AFD2ς**
    2FDς**
    FDRE2ς**
    2ςFD**
    2ς**FD
    2ς*FD**/DROP TABLE TBTEST
    当然,上面两个例子都用的charindex,其它like,patindex都是一样的。
      

  5.   


    呵呵,兄弟是一样啊,因为它们的ASCII码值一样!!
    按兄弟说的,输入值都得加N才会支持,学习!!!
      

  6.   

    其实就是希格姆, EXCEL中求合的那个符号,只不过这个是大写。 也就是 英文字母 M 逆时针转90度。
      

  7.   

    那个字符为双字节, 要用unicode的形式, 也就是在字符的前面加上前缀N, MSSQL就认为后面的串为双字节的
    如 N'ABC', N'我爱你', N'2ς**' 等等所以LZ只需在前面加个N就可以搞定了, 凡是双字节的都可以这样做, 当然单字节这样写也不会错where ID = N'2ς**' 
      

  8.   

    where ID like '%2ς%' 用这个试试吧。
      

  9.   

    [Quote=引用 14 楼 fcuandy 的回复:]
    9楼的测试根本就不对。 首先,ς这个字符,不被中文字符集所支持, 所以在中文操作系统上安装的sqlserver如果用默认排序规则chinese_rpc...,且用text,char,varchar之类数据类型,那么写入ς这个字符时,写入就是乱码。 9楼自己可以试一下, 
    SELECT * FROM TBTEST WHERE CHARINDEX('?',ID)>0 
    是不是跟你上面那句查到的结果一样? 
    CREATE TABLE TBTEST(ID NVARCHAR(10))
    INSERT TBTEST VALUES(N'AFD2ς**')
    INSERT TBTEST VALUES(N'2FDς**')
    INSERT TBTEST VALUES(N'FDRE2ς**')
    INSERT TBTEST VALUES(N'2ςFD**')
    INSERT TBTEST VALUES(N'2ς**FD')
    INSERT TBTEST VALUES(N'2ς*FD*')
    INSERT TBTEST VALUES(N'24546564**')SELECT * FROM TBTEST WHERE CHARINDEX(N'ς',ID)>0查询的时候+N查不出来,不+N才能查出来