如何检测全角字符?
数据库:SQL SERVER 2000
我想将表(tbl_a)的 A 字段中的含有全角字符的记录找出来,请问如何做?
问题点数:100、回复次数:16Top
1 楼letsflytogether(伍子)回复于 2003-12-01 10:55:34 得分 50
select * from ta1_a where columnname collate Chinese_PRC_CS_AS_WS='AA'Top
2 楼letsflytogether(伍子)回复于 2003-12-01 10:57:05 得分 0
Windows 排序规则名称
在 COLLATE 子句中指定 Windows 排序规则名称。Windows 排序规则名称由排序规则指示器和比较风格构成。
语法
< Windows_collation_name > :: =
CollationDesignator_<ComparisonStyle>
< ComparisonStyle > ::=
CaseSensitivity_AccentSensitivity
[_KanatypeSensitive [_WidthSensitive ] ]
| _BIN
参数
CollationDesignator
指定 Windows 排序规则使用的基本排序规则。基本排序规则包括:
当指定按字典排序时应用其排序规则的字母表或语言
用于存储非 Unicode 字符数据的代码页。
例如 Latin1_General 或法文,两者都使用代码页 1252,或土耳其文,它使用代码页 1254。
CaseSensitivity
CI 指定不区分大小写,CS 指定区分大小写。
AccentSensitivity
AI 指定不区分重音,AS 指定区分重音。
KanatypeSensitive
Omitted 指定不区分大小写,KS 指定区分假名类型。
WidthSensitivity
Omitted 指定不区分大小写,WS 指定区分大小写。
BIN
指定使用二进制排序次序。
Top
3 楼zzroom(徐子陵)回复于 2003-12-01 11:00:53 得分 0
to letsflytogether:
我的意思是:表(tbl_a)的 A 字段只能录入半角字符,我必须将录入了全角字符的记录找出来。用你的方法我要写很多语句,有更简单的方法吗?Top
4 楼zjcxc(邹建)回复于 2003-12-01 11:04:39 得分 50
区分大小写、全半角字符
--例子,查大写字母
select * from(
select aa='aa'
union all select 'Aa'
union all select 'AA' --全角A
union all select 'A,A' --全角A,半角,
union all select 'A,A' --全角A,全角,
)a
where aa collate Chinese_PRC_CS_AS_WS like '%A%'
--查全角
select * from(
select aa='aa'
union all select 'Aa'
union all select 'AA' --全角A
union all select 'A,A' --全角A,半角,
union all select 'A,A' --全角A,全角,
)a
where aa collate Chinese_PRC_CS_AS_WS like '%A%'
--查半角,
select * from(
select aa='aa'
union all select 'Aa'
union all select 'AA' --全角A
union all select 'A,A' --全角A,半角,
union all select 'A,A' --全角A,全角,
)a
where aa collate Chinese_PRC_CS_AS_WS like '%,%'
Top
5 楼letsflytogether(伍子)回复于 2003-12-01 11:26:46 得分 0
那你就用datalength吧
select datalength('A')
select datalength('A')Top
6 楼sunsunup(細水長流)回复于 2003-12-01 11:28:04 得分 0
select * from tableA where
fldA collate Chinese_PRC_CI_AS_WS like '%A%'
or fldA collate Chinese_PRC_CI_AS_WS like '%B%'
...Top
7 楼j9988(j9988)回复于 2003-12-01 14:00:39 得分 0
好笨的方法:
select * from table where YourField collate Chinese_PRC_CS_AS_WS
like '%[!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~]¥%'Top
8 楼j9988(j9988)回复于 2003-12-01 14:03:38 得分 0
还有 ̄“。”《》<>、|? 加上去,枚举Top
9 楼pengdali()回复于 2003-12-01 14:04:00 得分 0
如果不需要判断汉字,J老师写的是速度最快的。
Top
10 楼pengdali()回复于 2003-12-01 14:06:22 得分 0
恩,还有空格。Top
11 楼sdhdy(大江东去...)回复于 2003-12-01 14:14:58 得分 0
枚举的办法不错!Top
12 楼zjcxc(邹建)回复于 2003-12-01 14:37:22 得分 0
还没有想到更好的办法.Top
13 楼letsflytogether(伍子)回复于 2003-12-02 08:24:51 得分 0
这个办法怎么样
select * from(
select aa='aa'
union all select 'Aa'
union all select 'AA' --全角A
union all select 'A,A' --全角A,半角,
union all select 'A,A' --全角A,全角,
)a
where datalength(aa)>len(aa)Top
14 楼pengdali()回复于 2003-12-02 08:34:20 得分 0
楼上,有中文不需要判断。Top
15 楼pengdali()回复于 2003-12-02 08:48:36 得分 0
select * from 你的表 where not exists(select 1 from (
select nchar((select count(*)+65280 from sysobjects where id<tem.id)) code from sysobjects tem) a
where 你的列 like N'%'+code+N'%'Top
16 楼pengdali()回复于 2003-12-02 08:49:24 得分 0
select * from 你的表 where not exists(select 1 from (
select nchar((select count(*)+65280 from sysobjects where id<tem.id)) code from sysobjects tem) a
where 你的列 like N'%'+code+N'%')
--or
select * from 你的表 where not exists(select 1 from (
select nchar((select count(*)+65280 from sysobjects where id<tem.id)) code from sysobjects tem) a
where charindex(code,你的列)>0)Top




