写个函数判断:
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--有中文的记录
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--有中文的记录
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
*/
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
*/
vivianfdlpw() 的更好一些
2. where 字段 like '%[^a-zA-Z0-9]%',只判断数字及字母也是不全面的
3. Ascii(@b)<>Unicode(@b),同样没有考虑全角字符与半角字符所以还是一楼的比较可靠:)
select * from 表 where len(字段)<>datalength(字段)
-------------------------
这个是错误的吧len(字段)datalength(字段) 不会相等的
-----------------------------------
--建立测试环境
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
,,
。
*/
select * from 表 字段 like '%[^'+unicode(19968)+'-'+unicode(40870)+']%'
select * from 表 字段 like '%['+nchar(19968)+'-'+nchar(40870)+']%'
举例:“咖啡”的法文是“Café”,对于其中的“é”,Ascii(N'é')是168,而Unicode(N'é')是233,显然不能将其作为中文来处理小刀的不对,自己测:
if '啊' like '%['+nchar(19968)+'-'+nchar(40870)+']%'
print '有汉字'
else
print '无汉字'
print '有汉字'
else
print '无汉字'
print '有汉字'
else
print '无汉字'--结果
/*
无汉字
*