怎么可以得到汉字(繁体或者简体)的笔画数?

samkuang 2009-07-20 05:07:40
在oracle里可以有方法得到汉字的笔画数吗?我现在的目的是要实现按笔画数查找数据库,各位高手支招啊!!
...全文
387 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
deqin888 2009-08-06
  • 打赏
  • 举报
回复

CREATE TABLE TB_STROKE(WORD VARCHAR2(2),STROKE_COUNT NUMBER(2,0));

INSERT INTO TB_STROKE(WORD,STROKE_COUNT)
SELECT '一',1 FROM DUAL
UNION ALL
SELECT '二',2 FROM DUAL
UNION ALL
SELECT '口',3 FROM DUAL
UNION ALL
SELECT '木',4 FROM DUAL
UNION ALL
SELECT '禾',5 FROM DUAL
UNION ALL
SELECT '众',6 FROM DUAL
UNION ALL
SELECT '沐',7 FROM DUAL
UNION ALL
SELECT '和',8 FROM DUAL
UNION ALL
SELECT '骨',9 FROM DUAL
UNION ALL
SELECT '徐',10 FROM DUAL
UNION ALL
SELECT '曹',11 FROM DUAL
UNION ALL
SELECT '彭',12 FROM DUAL;

CREATE OR REPLACE FUNCTION GET_STROKE_COUNT(F_WORD IN VARCHAR2 )
RETURN INT
AS
I INT:=0;
BEGIN
SELECT MAX(STROKE_COUNT)+1 INTO I FROM TB_STROKE where nlssort(WORD,'NLS_SORT=SCHINESE_STROKE_M')<nlssort(F_WORD,'NLS_SORT=SCHINESE_STROKE_M');
RETURN I;
END GET_STROKE_COUNT;

--测试
SELECT GET_STROKE_COUNT('甲') FROM DUAL;
--显示5
SELECT GET_STROKE_COUNT('骨') FROM DUAL;
--显示9
SELECT GET_STROKE_COUNT('文') FROM DUAL;
--显示4
--SQL内直接调用
SELECT MAX(STROKE_COUNT)+1 FROM TB_STROKE where nlssort(WORD,'NLS_SORT=SCHINESE_STROKE_M')<nlssort('甲','NLS_SORT=SCHINESE_STROKE_M');

不得不说的是,以上存在问题的一个方面是TB_STROKE内插入的记录没有代表性,因为

SELECT nlssort('二','NLS_SORT=SCHINESE_STROKE_M') FROM DUAL
UNION ALL
SELECT nlssort('丁','NLS_SORT=SCHINESE_STROKE_M') FROM DUAL
UNION ALL
SELECT nlssort('人','NLS_SORT=SCHINESE_STROKE_M') FROM DUAL

显示的结果为
NLSSORT('二','NLS_SORT=SCHINES
3B3E0000010001
3B360000010001
3B4E0000010001
所以必须保证nlssort([],'NLS_SORT=SCHINESE_STROKE_M')同等笔画中最小.
下面会有更精彩的回复.
deqin888 2009-08-06
  • 打赏
  • 举报
回复
续.
以上汉字设置为




































xugh 2009-08-05
  • 打赏
  • 举报
回复
竟然还能这样子
lan125709702 2009-08-04
  • 打赏
  • 举报
回复
5楼兄弟蛮强大的
小飞龙 2009-08-04
  • 打赏
  • 举报
回复
5楼的哥们太厉害了,长见识了
ptpa 2009-08-04
  • 打赏
  • 举报
回复
学习了
yz394777014 2009-08-04
  • 打赏
  • 举报
回复

如何修改系统默认规则:
alter session set nls_sort='schinese_pinyin_m';
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');

Oracle9i之前,中文是按照二进制编码进行排序的。
在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序,系统的默认排序方式为拼音排序

举例如下:
表名为 dept ,其中name字段是中文,下面分别实现按照单位名称的笔划、部首和拼音排序。
1: //按照笔划排序
2: select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
3: //按照部首排序
4: select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');
5: //按照拼音排序,此为系统的默认排序方式
6: select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M'); 注意,该SQL指令并非标准指令,在SQLServer下面的实现方式并不相同。

maitianhust 2009-08-03
  • 打赏
  • 举报
回复
关注,没用过这个函数。
[Quote=引用 10 楼 zhanminga 的回复:]
引用 5 楼 jerryhrj 的回复:
表名为 dept,其中name字段是中文
SQL code//按照笔划排序select*from deptorderby nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');//按照部首排序select*from deptorderby nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');//按照拼音排序,此为系统的默认排序方式select*from deptorderby nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');

关注下
[/Quote]
bai_jiong 2009-08-03
  • 打赏
  • 举报
回复
mark
yangyt 2009-07-31
  • 打赏
  • 举报
回复
关注
zhouxu_hust 2009-07-31
  • 打赏
  • 举报
回复
UP
xcj0722 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 inthirties 的回复:]
厉害,是比较,还是排序,

排序,如果你的数据库的字符集支持的话,是可以做到的,

如果是比较的话,你需要写自己的function叻。

如果可以最好改数据库设计,加入字段,记录笔画。这才是数据库应该做的。
[/Quote]

up
zheping_xym 2009-07-27
  • 打赏
  • 举报
回复
搞个表,把每个汉字的笔画数输进去,然后要用的时候select一下就好了
不过前期过程痛苦

哈哈
zhanminga 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jerryhrj 的回复:]
表名为 dept,其中name字段是中文
SQL code//按照笔划排序select*from deptorderby nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');//按照部首排序select*from deptorderby nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');//按照拼音排序,此为系统的默认排序方式select*from deptorderby nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');
[/Quote]
关注下
lgfaichl 2009-07-23
  • 打赏
  • 举报
回复
什么项目啊?见识了
inthirties 2009-07-23
  • 打赏
  • 举报
回复
厉害,是比较,还是排序,

排序,如果你的数据库的字符集支持的话,是可以做到的,

如果是比较的话,你需要写自己的function叻。

如果可以最好改数据库设计,加入字段,记录笔画。这才是数据库应该做的。
csuxp2008 2009-07-21
  • 打赏
  • 举报
回复
关注一下
East271536394 2009-07-21
  • 打赏
  • 举报
回复
//按照笔划排序
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
//按照部首排序
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');
//按照拼音排序,此为系统的默认排序方式
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');
jerryhrj 2009-07-20
  • 打赏
  • 举报
回复
表名为 dept,其中name字段是中文

//按照笔划排序
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
//按照部首排序
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');
//按照拼音排序,此为系统的默认排序方式
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');
Dave 2009-07-20
  • 打赏
  • 举报
回复
up..

[Quote=引用 1 楼 sun1976 的回复:]
得建一个汉字\区位码\对应笔画数的表吧
不知道别人有没有省事的办法
[/Quote]
加载更多回复(3)
在Excel使用过程中,运用一些技巧会使得我们的工作效率提高很多。而这些技巧往往又被忽略或忘记怎么去使用。本套课程基于此整理了一些Excel方面的技巧,这些呢为学习笔记集锦,前后章内容不存在连贯性,仅整理一些常用的技巧与大家分享。l  本课程知识点l  第1节:概述、使用excel必会技巧之隐藏自己的工作表l  第2节:excel单元格任意区域禁止输入重复值设置技巧l  第3节: 一键快速删除工作表重复数据l  第4节:追踪所引用的单元格,查找数据来源l  第5节: 自动查找工作表中的错误数据l  第6节:快速在单元格中创建下拉按钮,内容直接选择不需输入l  第7节: 自动选择不重复的数据并复制到指定位置l  第8节:光标进入单元格时自动弹出提示内容l  第9节: 使用特殊符号将单元格内容分列并复制到指定区域l  第10节: Excel鼠标模式和触摸模式自由切换l  第11节:快速冻结首行和首列单元格l  第12节: 将打印预览和打印添加到快捷操作栏上l  第13节: 在录入日期的时候限制日期范围,错误则弹出提示l  第14节: Excel内置的屏幕截图工具操作方法l  第15节:插入注册商标符号及特殊符号l  第16节:在Excel工作表中插入艺术字并对艺术字特殊效果处理l  第17节: 对excel工作表中的多列数据同时排序l  第18节: 将选定的区域放大到恰好容纳位置l  第19节:按姓名或中文汉字笔画进行排序l  第20节: 按单元格颜色进行排序l  第21节:excel按行也可以排序l  第22节: excel中的数据快速条件筛选l  第23节:巧妙删除带有空格的单元格所在的行的内容l  第24节: 巧用辅助列进行筛选l  第25节:对中文汉字繁体字和简体字快速转换l  第26节: 隐藏最近使用的文件列表l  第27节:使用图标或等级符号标记单元格l  第28节: 自动套用主题单元格样式l  第29节: 插入超链接删除超链接l  第30节:绘图格式形状效果形状轮廓

17,088

社区成员

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

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