早上开过一帖,关于怎么截取中文字符,答案是有了,可我自己试怎么也不成功,网上也查了一下,答案也都是一样,怎么到我机器上就不行呢,烦死我了declare @S nvarchar(50)
set @S=N'铅笔 #1'select PATINDEX('%[^吖-座]%',@S)
select SUBSTRING(@S,1,2)结果:
1铅笔但如果我换一下:
declare @S nvarchar(50)
set @S='铅笔 #1'select PATINDEX('%[^吖-座]%',@S)
select SUBSTRING(@S,1,2)结果:
3??总是一个对一个不对,我要的结果是:
3铅笔
我都快疯了

解决方案 »

  1.   

    那用第一种,转换为unicode不就行了。
      

  2.   


    将你那一列的数据类型改为NVARCHAR型试试。
      

  3.   

    declare @S nvarchar(50)
    set @S=N'铅笔 #1'select PATINDEX('%[^吖-座]%',@S)
    select SUBSTRING(@S,1,2)
    -----------
    3(1 row(s) affected)
    ----
    铅笔(1 row(s) affected)
    SELECT   SERVERPROPERTY('Collation')
    -----------------------------
    Chinese_PRC_CI_AS
      

  4.   

    declare @S nvarchar(50)
    set @S=N'铅笔 #1'select PATINDEX('%[^吖-座]%',@S)
    select SUBSTRING(@S,1,2)go
    declare @S nvarchar(50)
    set @S='铅笔 #1'select PATINDEX('%[^吖-座]%',@S)
    select SUBSTRING(@S,1,2)/*            
    ----------- 
    3(所影响的行数为 1 行)     
    ---- 
    铅笔(所影响的行数为 1 行)            
    ----------- 
    3(所影响的行数为 1 行)     
    ---- 
    铅笔(所影响的行数为 1 行)表示一样,
      

  5.   

    第1列就是nvarchar(50)这个我只是开了一个查询测试而已,真正做的时候是从程序里传过来的字符,应该是unicode的,默认好像会自动加N的关键这个到底啥原因,为什么会这样,你们为什么正常,我只是单独开个查询而已啊
      

  6.   

    SELECT   SERVERPROPERTY('Collation')
      

  7.   

    字段是NVARCHAR就对的,看排序规则吧
      

  8.   

    SERVERPROPERTY('Collation')结果是:Chinese_PRC_CI_AS我说中邪了么,你们怎么都正常啊,操作系统:2003 英文,跟这个有关么?
      

  9.   

    format改成china (prc),location原来就是china,亚洲语言也已经装好的,还是不行...md,我要砸机器了