写个函数判断:
create function dbo.f_1(@s varchar(8000))
returns bit
begin
  declare @i int
  set @i=1
  while @i<=len(@s)
  begin
    if unicode(substring(@s,@i,1)) between 19968 and 40870--中文字符
      return 1
    set @i=@i+1
  end
  return 0
end
goselect * from t where dbo.f_1(字段)=1--有中文的记录

解决方案 »

  1.   

    select * from 表 where len(字段)<>datalength(字段)
      

  2.   

    select * from 表 where 字段 not like '%[^a-zA-Z0-9]%'
      

  3.   

    有中文的select * from 表 where 字段  like '%[^a-zA-Z0-9]%'没有中文的select * from 表 where 字段 not like '%[^a-zA-Z0-9]%'
      

  4.   

    --建立测试环境
    Create Table TEST(TText Nvarchar(100))
    Insert TEST Values(N'DERT')
    Insert TEST Values(N'WER主')
    Insert TEST Values(N'是huy中')
    Insert TEST Values(N'手  u')
    Insert TEST Values(N'Ujk中')
    Insert TEST Values(N'UIIO')
    Insert TEST Values(N'U不KIL')
    Insert TEST Values(N'中是国RT')
    Insert TEST Values(N'erryyu')
    GO
    --创建函数
    Create Function Char_Fun(@a Nvarchar(4000))
    Returns Nvarchar(2000)
    As 
    Begin
    Declare @b Nvarchar(100)
    Declare @c Int
    Declare @d Nvarchar(200)
    Set @c=0
    Set @d=''
    While Len(@a)>=@c
    Begin
    Set @c=@c+1
    Set @b=Substring(@a,@c-1,1)
    If Ascii(@b)<>Unicode(@b)
    Set @d=@d+@b --把是中文的字符联合
    End
    Return(@d)
    End
    GO
    --测试
    Select * from TEST Where dbo.char_fun(TText)<>''
    --删除测试环境
    Drop Table TEST
    Drop Function Char_Fun
    --结果
    /*
    WER主
    是huy中
    手  u
    Ujk中
    U不KIL
    中是国RT
    */
      

  5.   

    --建立测试环境
    Create Table TEST(TText Nvarchar(100))
    Insert TEST Values(N'DERT')
    Insert TEST Values(N'WER主')
    Insert TEST Values(N'是huy中')
    Insert TEST Values(N'手  u')
    Insert TEST Values(N'Ujk中')
    Insert TEST Values(N'UIIO')
    Insert TEST Values(N'U不KIL')
    Insert TEST Values(N'中是国RT')
    Insert TEST Values(N'erryyu')
    GO
    --创建函数
    Create Function Char_Fun(@a Nvarchar(4000))
    Returns Nvarchar(2000)
    As 
    Begin
    Declare @b Nvarchar(100)
    Declare @c Int
    Declare @d Nvarchar(200)
    Set @c=0
    Set @d=''
    While Len(@a)>=@c
    Begin
    Set @c=@c+1
    Set @b=Substring(@a,@c-1,1)
    If Ascii(@b)<>Unicode(@b)
    Set @d=@d+@b --把是中文的字符联合
    End
    Return(@d)
    End
    GO
    --测试
    Select * from TEST Where dbo.char_fun(TText)<>''
    --删除测试环境
    Drop Table TEST
    Drop Function Char_Fun
    --结果
    /*
    WER主
    是huy中
    手  u
    Ujk中
    U不KIL
    中是国RT
    */
      

  6.   

    谢谢, pbsql(风云) , vivianfdlpw() 
     vivianfdlpw() 的更好一些
      

  7.   

    1. len(字段)<>datalength(字段),全角字符“A”的len与datalength是不相等的,但他不是中文,所以这样是不行的
    2. where 字段  like '%[^a-zA-Z0-9]%',只判断数字及字母也是不全面的
    3. Ascii(@b)<>Unicode(@b),同样没有考虑全角字符与半角字符所以还是一楼的比较可靠:)
      

  8.   

    回复人: vivianfdlpw() ( ) 信誉:100  2005-06-22 10:05:00  得分: 0  
     
     
       select * from 表 where len(字段)<>datalength(字段)
      
     
    -------------------------
    这个是错误的吧len(字段)datalength(字段) 不会相等的
      

  9.   

    回复人: pbsql(风云) ( ) 信誉:138  2005-06-22 10:20:00  得分: 0  3. Ascii(@b)<>Unicode(@b),同样没有考虑全角字符与半角字符所以还是一楼的比较可靠:)
      
     
    -----------------------------------
    --建立测试环境
    Create Table TEST(TText Nvarchar(100))
    Insert TEST Values(N'DERT')
    Insert TEST Values(N'WER主')
    Insert TEST Values(N'是huy中')
    Insert TEST Values(N'手  u')
    Insert TEST Values(N'Ujk中')
    Insert TEST Values(N'UIIO')
    Insert TEST Values(N'U不KIL')
    Insert TEST Values(N'中是国RT')
    Insert TEST Values(N'erryyu')
    Insert TEST Values(N',,,,')
    Insert TEST Values(N',,')
    Insert TEST Values(N'。')
    GO
    --创建函数
    Create Function Char_Fun(@a Nvarchar(4000))
    Returns Nvarchar(2000)
    As 
    Begin
    Declare @b Nvarchar(100)
    Declare @c Int
    Declare @d Nvarchar(200)
    Set @c=0
    Set @d=''
    While Len(@a)>=@c
    Begin
    Set @c=@c+1
    Set @b=Substring(@a,@c-1,1)
    If Ascii(@b)<>Unicode(@b)
    Set @d=@d+@b --把是中文的字符联合
    End
    Return(@d)
    End
    GO
    --测试
    Select * from TEST Where dbo.char_fun(TText)<>''
    --删除测试环境
    Drop Table TEST
    Drop Function Char_Fun
    --结果
    /*
    WER主
    是huy中
    手  u
    Ujk中
    U不KIL
    中是国RT
    ,,

    */
      

  10.   

    Ascii为0——255,这个范围之外的字符还有很多不是中文,所以认定Ascii(@b)<>Unicode(@b)就是中文肯定是不妥的,例如全角字母与半角字母另外,楼主要的是“中文”还是“汉字”?这是一个问题
      

  11.   

    哈哈  不知道行不行,大家帮测一下
    select * from 表 字段 like '%[^'+unicode(19968)+'-'+unicode(40870)+']%'
      

  12.   

    哈哈  不知道行不行,大家帮测一下
    select * from 表 字段 like '%['+nchar(19968)+'-'+nchar(40870)+']%'
      

  13.   

    paoluo(一天到晚游泳的鱼):
    举例:“咖啡”的法文是“Café”,对于其中的“é”,Ascii(N'é')是168,而Unicode(N'é')是233,显然不能将其作为中文来处理小刀的不对,自己测:
    if '啊' like '%['+nchar(19968)+'-'+nchar(40870)+']%'
      print '有汉字'
    else
      print '无汉字'
      

  14.   

    呵 谢谢风云,我机器上没装sql server
      

  15.   

    --这样应该可以吧? 手边没电脑,测试不了,应该按排序规则强制判断就可以了if '啊' collate Chinese_PRC_Stroke_CS_AS_KS_WS like '%['+nchar(19968)+'-'+nchar(40870)+']%'
      print '有汉字'
    else
      print '无汉字'
      

  16.   

    if '啊' collate Chinese_PRC_Stroke_CS_AS_KS_WS like '%['+nchar(19968)+'-'+nchar(40870)+']%'
      print '有汉字'
    else
      print '无汉字'--结果
    /*
    无汉字
    *