在SQL Server中下划线似乎是被当作通配符的。相当于教材上的“?”通配符,而SQL Server中"?"只是一个字符

解决方案 »

  1.   

    跟-符无关select CharIndex('A@A',N'RoleNameA@A゛戀戰℡帝王') 这样结果仍然是0,和这个符号'゛'有关,不知道是个什么东西?
      

  2.   

    print ascii('゛')
    print char(169)print ascii('a')
    print char(97)垃圾字符,都无法逆,不行就patindex
      

  3.   

    asc =-22175 
    不是中文.也不是英文..鬼东西...
      

  4.   

    select CharIndex('゛',N'RoleName_@_゛戀戰℡帝王') 

    这是什么鬼东西...
      

  5.   

    不行就patindex
    -----
    这个可以
      

  6.   

    --> 随便用一种二进制排序规则都可以解决问题:select
    CharIndex('_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_BIN),
    CharIndex('_@_',N'RoleName_@_戀戰℡帝王' COLLATE Chinese_PRC_BIN)select
    CharIndex('_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE SQL_Latin1_General_CP437_BIN),
    CharIndex('_@_',N'RoleName_@_戀戰℡帝王' COLLATE SQL_Latin1_General_CP437_BIN)--> 查找排序规则:
    select top 1 * from ::fn_helpcollations() where name like '%BIN'
      

  7.   

    --> 为什么说patindex未必可以,因为patindex将_当作通配符:select patindex('%X@Y%',N'RoleNameX@Y゛戀戰℡帝王') --> 0select patindex('%_@_%',N'RoleNameX@Y゛戀戰℡帝王') --> 9,_是通配符,不是要找的字符select patindex('%_@_%',N'RoleName_@_゛戀戰℡帝王') --> 9,这是一个巧合。
      

  8.   

    顺便再说一句,charindex不支持通配符,所以
    charindex('_@_',N'RoleName_@_゛戀戰℡帝王')=0
      

  9.   

    --> 二进制排序是区分大小写的:
    select
    CharIndex('e_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_BIN),
    CharIndex('E_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_BIN)--> 如果要不区分大小写:
    select
    CharIndex('e_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_CI_AI),
    CharIndex('E_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_CI_AI)--> 查找排序规则:
    select top 1 * from ::fn_helpcollations() where name like '%CI%AI%'
      

  10.   

    谢谢, 
    --> 二进制排序是区分大小写的:
    select
        CharIndex('e_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_BIN),
        CharIndex('E_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_BIN)--> 如果要不区分大小写:
    select
        CharIndex('e_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_CI_AI),
        CharIndex('E_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_CI_AI)
    这个就可以了