oracle9i如何匹配中文的汉字?

清风_X 2009-06-19 09:34:38
由于9i好像不支持正则,所以在DW里面做数据清理的时候,非常的麻烦。。

我们的项目里面有联系人必须为中文汉字不能有其它的字符),请问这个sql该怎么写?

在线等……
...全文
302 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
deng_1987 2009-11-09
  • 打赏
  • 举报
回复
哇,,高手。。
小弟正在初学oracle
select * from student where sname like '李__';
怎么执行不了呀?
tiancx82 2009-10-04
  • 打赏
  • 举报
回复
4楼的思路正确,但是有些希腊字母也是多字节的,不知道这种怎么解决?
清风_X 2009-09-30
  • 打赏
  • 举报
回复
你的方法在NLS_CHARACTERSET=AL32UTF8 的确是可以的,
但是5楼的方法在us7ascii编码下是行不通的,测试如下:

SQL> SELECT STR                                              
2 FROM (SELECT '中国' STR FROM DUAL UNION ALL
3 SELECT '英国1' STR FROM DUAL UNION ALL
4 SELECT '美国2' STR FROM DUAL UNION ALL
5 SELECT '日本123' STR FROM DUAL UNION ALL
6 SELECT '韩国。,,.' STR FROM DUAL UNION ALL
7 SELECT '123' STR FROM DUAL UNION ALL
8 SELECT 'abcde' STR FROM DUAL)
9 WHERE TO_SINGLE_BYTE(STR) = TO_MULTI_BYTE(STR) ;

STR
----------
中国
英国1
美国2
日本123
韩国。,,.
123
abcde

7 rows selected.

SQL> SELECT * FROM nls_database_parameters WHERE parameter LIKE 'NLS_%';

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET US7ASCII
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_RDBMS_VERSION 11.1.0.7.0

20 rows selected.

SQL>


[Quote=引用 9 楼 cctv_13 的回复:]
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
这是我的数据库编码
如果使用UTF8的话 估计就如5楼所说了
[/Quote]
CCTV_13 2009-09-27
  • 打赏
  • 举报
回复
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
这是我的数据库编码
如果使用UTF8的话 估计就如5楼所说了
CCTV_13 2009-09-27
  • 打赏
  • 举报
回复
select col, length(col), lengthb(col) from tab
1 测试B类 4 7
2 待审批 3 6

这是我的数据库出的结果.
应该更数据库的设置有关
zdm090805 2009-09-23
  • 打赏
  • 举报
回复
SQL> SELECT STR
2 FROM (SELECT '中国' STR FROM DUAL UNION ALL
3 SELECT '英国1' STR FROM DUAL UNION ALL
4 SELECT '美国2' STR FROM DUAL UNION ALL
5 SELECT '日本123' STR FROM DUAL UNION ALL
6 SELECT '韩国。,,.' STR FROM DUAL UNION ALL
7 SELECT '123' STR FROM DUAL UNION ALL
8 SELECT 'abcde' STR FROM DUAL)
9 WHERE TO_SINGLE_BYTE(STR) = TO_MULTI_BYTE(STR)
10 /

STR
------------------------
中国
清风_X 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wanglei8 的回复:]
SQL codeselect namefrom tbwhere length(name)*3=lengthb(name);
[/Quote]

SELECT first_name, length(first_name), lengthb(first_name) FROM cnods.MEMBER WHERE rownum<10;


1	许燕		4	4
2 谢明明 6 6
3 秦岚 4 4
4 卢赞超 6 6
5 徐东 4 4
6 西村真友美 10 10
7 邹林江 6 6
8 chenxia 7 7
9 杨洪林 6 6
wanglei8 2009-07-23
  • 打赏
  • 举报
回复

select name from tb where length(name)*3=lengthb(name);
清风_X 2009-07-22
  • 打赏
  • 举报
回复
解决思路:
判断字符串中每个字符是否是双字节的,如果都是双字节字符,则表明字符串都是汉字。
详细的源码请看我的文章:
http://blog.csdn.net/xiexbb/archive/2009/06/25/4296629.aspx
清风_X 2009-06-20
  • 打赏
  • 举报
回复
我的数据库字符集是US7ASCII
SQL> select * from v$nls_parameters where PARAMETER='NLS_CHARACTERSET';

PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_CHARACTERSET US7ASCII


搞了几天,还是得用asciistr()函数,但是有的是繁体字,所以不好处理,比如:我匹配regexp_like(TRIM(name), '[a-z]')的时候,name为繁体字的也匹配到了,郁闷……
清风_X 2009-06-19
  • 打赏
  • 举报
回复
我的要是名字必须都是中文汉字的,比如它会过滤掉一下的名字:

侯晨光1
2侯晨光
li xue yi
郑生//QQ:63680299
招商加盟053
舒兰(Jenny)
jacko zhu


[Quote=引用 1 楼 hotyxm 的回复:]
是直接select * from where name = '张三' ?
[/Quote]
hotyxm 2009-06-19
  • 打赏
  • 举报
回复
是直接select * from where name = '张三' ?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧