如果只有英文和韩文 /*******该函数返回字符串中除英文外的字符*********/ create function test(@a varchar(20)) returns varchar(20) as begin declare @b varchar(20),@i int set @b = '' set @i = 1 while @i<= len(@a) begin if Upper(substring(@a,@i,1)) not between 'A' and 'Z' set @b = @b + substring(@a,@i,1) set @i = @i+1 end return @b endSelect dbo.test('aabc12dsa451') -------------------- 12451(所影响的行数为 1 行)
是呀,不仅有数字可能还有其它ASCII码
简单做法:select * from 表 where len(列)<>datalength(列)
或: where 字符串 like '%[^A-z0-9]%'
--1.有关多国文字的,一定要用UNICODE判断! --2.韩文UNICODE分两断: 12592->12687 44032->55203 相关网站:http://www.buja.8u8.com/eeeeee.htm create function hw(@str Nvarchar(100)) returns int as begin declare @a int set @a=0 while @str<>'' and @a=0 begin set @a=(case when unicode(left(@str,1)) between 12592 and 12687 or unicode(left(@str,1)) between 44032 and 55203 then 1 else 0 end) set @str=right(@str,len(@str)-1) end return @a end --调用: declare @a nvarchar(100) set @a=N'abc中갃国123' select dbo.hw(@a)--return: 1 set @a=N'abc中国123' select dbo.hw(@a)--return: 0
贴出显示出错了。 set @a=N'abc中갃国123' 갃----网页上贴不出来,原来是韩文,查询分析器上可以看到文字: select nchar(44035)
select * from 表 where len(列)<>datalength(列),这种方法我试过,不行
除非你表内的排序规则出是韩文排序规则的。否则基本没戏。 set nocount on declare @a table(a varchar(100) collate Korean_Wansung_CS_AI_KS_WS) insert @a select N'abc한국어' insert @a select N'abc한국어' insert @a select N'abc' select * from @a
除非你表内的排序规则出是韩文排序规则的。否则在中文下基本没戏。 set nocount on declare @a table(a varchar(100) collate Korean_Wansung_CS_AI_KS_WS) --用VARCHAR但排序规则得是韩文排序规则 insert @a select N'abc'+nchar(54620)+nchar(44397)+Nchar(50612) insert @a select N'abc'+nchar(54620)+nchar(44397)+Nchar(50612) insert @a select N'abc' select * from @a
create function get_hw(@str Nvarchar(100)) returns nvarchar(100) as begin declare @a nvarchar(100) set @a='' while @str<>'' begin set @a=@a+(case when unicode(left(@str,1)) between 12592 and 12687 or unicode(left(@str,1)) between 44032 and 55203 then left(@str,1) else '' end) set @str=right(@str,len(@str)-1) end return @a end --就是说你原字段中如果VARCHAR类型无法改变,得是韩文排序规则。 --如:Korean_Wansung_CS_AI_KS_WSset nocount on declare @a table(a varchar(100) collate Korean_Wansung_CS_AI_KS_WS) insert @a select N'abc'+nchar(54620)+nchar(44397)+Nchar(50612) insert @a select N'abc'+nchar(54620)+nchar(44397)+Nchar(50612) insert @a select N'abc' select * from @a--这样就能够得到正确的韩文,否则在中文环境下根本无法得到韩文 select dbo.get_hw(a) from @a
/*******该函数返回字符串中除英文外的字符*********/
create function test(@a varchar(20))
returns varchar(20)
as
begin
declare @b varchar(20),@i int
set @b = ''
set @i = 1
while @i<= len(@a)
begin
if Upper(substring(@a,@i,1)) not between 'A' and 'Z'
set @b = @b + substring(@a,@i,1)
set @i = @i+1
end
return @b
endSelect dbo.test('aabc12dsa451')
--------------------
12451(所影响的行数为 1 行)
where 字符串 like '%[^A-z0-9]%'
--2.韩文UNICODE分两断: 12592->12687 44032->55203
相关网站:http://www.buja.8u8.com/eeeeee.htm
create function hw(@str Nvarchar(100))
returns int
as
begin
declare @a int
set @a=0
while @str<>'' and @a=0
begin
set @a=(case when unicode(left(@str,1)) between 12592 and 12687
or unicode(left(@str,1)) between 44032 and 55203
then 1
else 0 end)
set @str=right(@str,len(@str)-1)
end
return @a
end --调用:
declare @a nvarchar(100)
set @a=N'abc中갃国123'
select dbo.hw(@a)--return: 1
set @a=N'abc中国123'
select dbo.hw(@a)--return: 0
set @a=N'abc中갃国123'
갃----网页上贴不出来,原来是韩文,查询分析器上可以看到文字:
select nchar(44035)
所以看看大家有没有其它办法
select nchar(id) from #tdrop table #t你再HW函数试试就知道了. 一定要:N'韩文'
set nocount on
declare @a table(a varchar(100) collate Korean_Wansung_CS_AI_KS_WS)
insert @a select N'abc한국어'
insert @a select N'abc한국어'
insert @a select N'abc'
select * from @a
set nocount on
declare @a table(a varchar(100) collate Korean_Wansung_CS_AI_KS_WS)
--用VARCHAR但排序规则得是韩文排序规则
insert @a select N'abc'+nchar(54620)+nchar(44397)+Nchar(50612)
insert @a select N'abc'+nchar(54620)+nchar(44397)+Nchar(50612)
insert @a select N'abc'
select * from @a
returns nvarchar(100)
as
begin
declare @a nvarchar(100)
set @a=''
while @str<>''
begin
set @a=@a+(case when unicode(left(@str,1)) between 12592 and 12687
or unicode(left(@str,1)) between 44032 and 55203
then left(@str,1)
else '' end)
set @str=right(@str,len(@str)-1)
end
return @a
end --就是说你原字段中如果VARCHAR类型无法改变,得是韩文排序规则。
--如:Korean_Wansung_CS_AI_KS_WSset nocount on
declare @a table(a varchar(100) collate Korean_Wansung_CS_AI_KS_WS)
insert @a select N'abc'+nchar(54620)+nchar(44397)+Nchar(50612)
insert @a select N'abc'+nchar(54620)+nchar(44397)+Nchar(50612)
insert @a select N'abc'
select * from @a--这样就能够得到正确的韩文,否则在中文环境下根本无法得到韩文
select dbo.get_hw(a) from @a