- 浏览: 107613 次
- 性别:
- 来自: 上海
最新评论
-
Seanman:
cuiyan3327 写道你好,看了您的帖子,非常好!我也正在 ...
Freemarker无法使用Session和Taglib -
Seanman:
Could not find an instance of f ...
Freemarker无法使用Session和Taglib -
NeverGiveUpToChange:
受教了!学习下……
oracle删除重复记录,只保留一条记录 -
liuxue0905:
还有这个是我提的一个问题,不知道你是否有解决办法。http:/ ...
解决Hibernate原生SQL映射问题 -
liuxue0905:
List list = getSession().create ...
解决Hibernate原生SQL映射问题
这是一个oracle函数,可以将阿拉伯数字与汉字进行相互转化,如1234567890.0123可以转化为“十二亿三千四百五十六万七千八百九十点零一二三”,同样也可以将汉字转化为对应的数字。
该函数支持千兆下的浮点数字,但不支持指数形式。
/* Formatted on 2009/12/22 17:03 (Formatter Plus v4.8.8) */ CREATE OR REPLACE PACKAGE czutil AS --将数字转化为汉字,支持千兆级数字的操作 FUNCTION num2chi (numvalue IN NUMBER) RETURN VARCHAR2; --将汉字转化为数字,支持千兆级数字的操作 FUNCTION chi2num (chivalue IN VARCHAR2) RETURN NUMBER; END; CREATE OR REPLACE PACKAGE BODY czutil AS FUNCTION num2chi (numvalue IN NUMBER) RETURN VARCHAR2 IS --汉字映射数字的映射表 TYPE MAP IS TABLE OF VARCHAR2 (10) INDEX BY BINARY_INTEGER; ling_jiu_map MAP; shibaiqian_map MAP; wanyizhao_map MAP; --临时变量 i INT := 0; --'临时变量 j INT := 0; --临时变量 k INT := 0; --临时变量 x INT := 0; --临时变量 y INT := 0; --临时变量 str VARCHAR2 (100) := ''; --临时变量 tmp VARCHAR2 (100) := ''; --临时变量 integer_part VARCHAR2 (100) := ''; --数字形式整数部分 float_part VARCHAR2 (100) := ''; --数字形式小数部分 returnvalue VARCHAR2 (100) := ''; --返回值 BEGIN --初始化数组 ling_jiu_map (0) := '零'; ling_jiu_map (1) := '一'; ling_jiu_map (2) := '二'; ling_jiu_map (3) := '三'; ling_jiu_map (4) := '四'; ling_jiu_map (5) := '五'; ling_jiu_map (6) := '六'; ling_jiu_map (7) := '七'; ling_jiu_map (8) := '八'; ling_jiu_map (9) := '九'; shibaiqian_map (0) := ''; shibaiqian_map (1) := '十'; shibaiqian_map (2) := '百'; shibaiqian_map (3) := '千'; wanyizhao_map (0) := ''; wanyizhao_map (1) := '万'; wanyizhao_map (2) := '亿'; wanyizhao_map (3) := '兆'; --将数字拆分为整数与浮点数两个数字数组 i := INSTR (numvalue, '.', 1); IF i = 0 THEN integer_part := SUBSTR (numvalue, 1); ELSE integer_part := FLOOR (numvalue); float_part := SUBSTR (numvalue, i + 1); END IF; --计算整数部分 i := LENGTH (integer_part); j := CEIL (i / 4); k := 0; --将整数部分每四个分为一个组 FOR k IN 0 .. j - 1 LOOP IF k = 0 THEN str := SUBSTR (integer_part, 1, i - 4 * j + 4); ELSE str := SUBSTR (integer_part, i - 4 * j + 4 * k + 1, 4); END IF; x := LENGTH (str); y := 0; tmp := ''; --将每个组中数据转化为汉字 FOR y IN 0 .. x - 1 LOOP tmp := tmp || ling_jiu_map (SUBSTR (str, y + 1, 1)) || shibaiqian_map (x - y - 1); END LOOP; --零处理 tmp := RTRIM (tmp, '零'); --去掉兆亿万前面个位上的零 tmp := REGEXP_REPLACE (tmp, '(零[千百十])', '零'); --千百十位上的零 tmp := REGEXP_REPLACE (tmp, '(零{2,})', '零'); --将千百十位上的零结合 returnvalue := returnvalue || tmp || wanyizhao_map (j - k - 1); END LOOP; --零处理 --去掉兆亿万上的零 returnvalue := REGEXP_REPLACE (returnvalue, '(零[兆亿万])', '零'); --将兆亿万位上的零结合 returnvalue := REGEXP_REPLACE (returnvalue, '(零{2,})', '零'); --简称十位上的一 returnvalue := REGEXP_REPLACE (returnvalue, '^一十', '十'); returnvalue := REGEXP_REPLACE (returnvalue, '零一十', '零十'); --放进返回结果 IF returnvalue IS NULL THEN returnvalue := '零'; END IF; IF float_part IS NOT NULL THEN --计算小数部分 k := 0; tmp := ''; FOR k IN 1 .. LENGTH (float_part) LOOP tmp := tmp || ling_jiu_map (SUBSTR (float_part, k, 1)); END LOOP; returnvalue := returnvalue || '点' || tmp; END IF; RETURN returnvalue; END; FUNCTION chi2num (chivalue IN VARCHAR2) RETURN NUMBER IS --汉字映射数字的映射表 TYPE MAP IS TABLE OF BINARY_INTEGER INDEX BY VARCHAR2 (10); ling_jiu_map MAP; shibaiqian_map MAP; wanyizhao_map MAP; --临时变量 i INT := 0; --'临时变量 j INT := 0; --临时变量 k INT := 0; --临时变量 x INT := 0; --临时变量 y INT := 0; --临时变量 str VARCHAR2 (100) := ''; --临时变量 tmp INT := 0; --临时变量 tmp2 INT := 0; --临时变量 integer_part VARCHAR2 (100) := ''; --数字形式整数部分 float_part VARCHAR2 (100) := ''; --数字形式小数部分 returnvalue NUMBER := 0; --返回值 BEGIN --初始化数组 ling_jiu_map ('零') := 0; ling_jiu_map ('一') := 1; ling_jiu_map ('二') := 2; ling_jiu_map ('三') := 3; ling_jiu_map ('四') := 4; ling_jiu_map ('五') := 5; ling_jiu_map ('六') := 6; ling_jiu_map ('七') := 7; ling_jiu_map ('八') := 8; ling_jiu_map ('九') := 9; shibaiqian_map ('') := 0; shibaiqian_map ('十') := 1; shibaiqian_map ('百') := 2; shibaiqian_map ('千') := 3; wanyizhao_map ('') := 0; wanyizhao_map ('万') := 1; wanyizhao_map ('亿') := 2; wanyizhao_map ('兆') := 3; --将十位上的一补充完整 str := REGEXP_REPLACE (chivalue, '^十', '一十'); str := REGEXP_REPLACE (str, '零十', '零一十'); --将数字拆分为整数与浮点数两个数字数组 i := INSTR (str, '点', 1); IF i = 0 THEN integer_part := SUBSTR (str, 1); ELSE integer_part := SUBSTR (str, 1, i - 1); float_part := SUBSTR (str, i + 1); END IF; --整型部分 x := LENGTH (integer_part); str := ''; tmp := 0; tmp2 := 0; FOR k IN 1 .. x LOOP str := SUBSTR (integer_part, k, 1); IF str IN ('万', '亿', '兆') THEN --当碰到万亿兆时 tmp := tmp + tmp2; returnvalue := returnvalue + tmp * POWER (10000, wanyizhao_map (str)); tmp := 0; tmp2 := 0; ELSIF str IN ('十', '百', '千') THEN --当碰到十百千时 tmp := tmp + tmp2 * POWER (10, shibaiqian_map (str)); tmp2 := 0; ELSE --当碰到数字时 tmp2 := ling_jiu_map (str); END IF; END LOOP; --最后将没有小于万位数加到整数中去 tmp := tmp + tmp2; returnvalue := returnvalue + tmp; IF float_part IS NOT NULL THEN --计算小数部分 k := 0; tmp := ''; FOR k IN 1 .. LENGTH (float_part) LOOP tmp := tmp || ling_jiu_map (SUBSTR (float_part, k, 1)); END LOOP; returnvalue := returnvalue || '.' || tmp; END IF; RETURN returnvalue; END; END czutil;
评论
3 楼
蔡华江
2011-08-26
应该是select czutil.num2chi(23) from dual; 调用,至于为什么出错,还真不清楚
2 楼
远去的渡口
2011-08-26
刚才想试试这个方法的效果,就在PL SQL中调用了,我知道调用存储过程是用call,所以就试了,
call call czutil.num2chi(23) ;
还有select czutil.num2chi(23) from dual;
怎么报“程序包或函数f_getcblrsl处于无效状态”,是不是哪里有拼写错误呢,我找了半天没看出来 还是我调用的不对呀
call call czutil.num2chi(23) ;
还有select czutil.num2chi(23) from dual;
怎么报“程序包或函数f_getcblrsl处于无效状态”,是不是哪里有拼写错误呢,我找了半天没看出来 还是我调用的不对呀
1 楼
远去的渡口
2011-08-26
很强大,我还从来没有在Oracle中写过这样的方法。
发表评论
-
出现Lob 段无法通过 XX 扩展异常
2010-01-06 08:51 3735今天在导入数据出现异常,如下所示: 写道 IMP-0005 ... -
ROWNUM与ROW_NUMBER()
2009-12-16 19:21 4701主要是在网上看到了一些关于排序分页的帖子,个人感觉 ... -
ODU——Oracle数据恢复软件
2009-12-03 12:41 515一次偶然的错 ... -
使用Oracle Text进行全文检索
2009-12-01 18:44 2433由于系统中数据不断增多,使得原用的like语法来进行查询法律全 ... -
使用DBMS_OUTPUT
2009-11-14 19:17 262设置DBMS_OUTPUT输出 set serveroutp ... -
oracle语义模式
2009-11-05 11:45 3475在进行数据库查询的时 ... -
Oracle树查询及相关函数
2009-10-29 16:15 4006Oracle树查询的最重要的就是select... ... -
oracle删除重复记录,只保留一条记录
2009-10-11 13:16 6230DELETE FROM hs a WHERE R ... -
EXECUTE IMMEDIATE用法小解
2009-10-11 02:31 3065EXECUTE IMMEDIATE 代替了以 ... -
Analytic Functions
2009-10-09 08:57 76Analytic functions compute an a ... -
Oracle在Debian下安装
2009-09-22 00:44 96从Oracle官方网站上下来Oracle11g安装包,两个共2 ... -
Oracle查看执行计划
2009-09-17 16:34 1321.Explain plan explain pla ... -
给主键建立索引
2009-09-17 14:50 881.查询表的主键信息 SELECT table_name,c ... -
sort_area_size设置
2009-09-16 18:38 476在需要执行大批量排序的批处理会话中增大sort_are ...
相关推荐
通过上述分析,我们可以看出,`money_to_chinese`函数巧妙地实现了将数字转换为中文大写的功能,不仅考虑到了数值的正负、大小,还通过精心设计的逻辑避免了冗余和错误的出现,确保了转换结果的准确性。这对于财务...
在Oracle数据库环境中,有时我们需要将数字金额转换成汉字大写形式,这在财务报表或理财程序中尤为常见,因为汉字大写是财务领域的一种标准表示方式,可以避免因数字混淆而引发的错误。本篇文章将深入探讨如何在...
"Oracle函数大全中文API文档"是一个非常实用的资源,它提供了对Oracle数据库所有内置函数的详尽解释,帮助开发者和DBA快速理解和使用这些函数。 1. **日期与时间函数**: Oracle提供了处理日期和时间的大量函数,...
根据提供的文件信息,本文将详细介绍如何实现“oracle非数字合计”,即将字段中含有汉字或其他非数字字符的数据自动转换为数字0的过程。 ### 一、问题背景 在实际工作中,可能会遇到这样的情况:某个字段中本应...
总的来说,实现Oracle中批量修改汉字转拼音首字母的功能,需要对Oracle的内置函数有深入了解,并可能涉及到自定义PL/SQL函数的编写。这个过程可能涉及到字符编码、Unicode转换以及对多音字的处理,是一个涉及多方面...
参考了网上的SPELLCODE获得汉字首字母函数和f_getSpellcode函数,主要是把PIPE Row(spell_code('a', -20319))等内容改成了字符串再进行比较,效率提高了很多倍,基本响应速度在毫秒级。 在项目中得到了应用,像百度...
在Android开发过程中,有时我们需要将阿拉伯数字(1, 2, 3...)转换成中文小写数字(一,二,三...),特别是在涉及到文化习惯或者用户界面本地化的时候,如书籍页码显示。这个任务涉及到字符串处理和字符映射,下面...
下面我们将深入探讨如何使用Oracle函数来获取汉字的拼音。 首先,`获取汉字拼音和拼音首字母的功能函数.pdf`可能是一个文档,详细介绍了如何创建和使用这类函数。通常,这样的函数会包含两个部分:一是将汉字转换为...
在Oracle数据库中,处理金融数据时,我们经常需要对金额进行格式化,使其符合特定的显示标准,例如将数字转换为大写的汉字或者添加货币符号等。"Oracle 金额转换"是一个关键的操作,用于提高数据的可读性和合规性。...
1、编写视图时遇到多选的字典编码需要转换多选的名称时,比如将‘1,2,3...’ 转换成‘是,否,未知’ 2、通过函数实现,传入值1)字段名,2)对应关系,返回翻译后的中文多选字符串。
拼音码是基于中文汉字的拼音首字母或全拼,将汉字转化为英文输入的方式。比如,“数据库”可以用“dbks”作为其拼音码,这样在没有中文输入法的情况下,也能快速输入对应的汉字。对于Oracle数据库的操作,了解并熟练...
4. INITCAP(n)函数:它将字符串中每个单词的首字母转化为大写,其余部分转为小写。但请注意,对于中文字符,此函数通常没有作用,因为中文字符之间没有空格分隔。例如,`INITCAP('中 国 人 民')`仍会返回'中 国 人 ...
Oracle数据库在处理中文字符时,有时需要将中文转化为拼音,以进行特定的数据处理或搜索功能。这个"Oracle中文转拼音工具包"就是为了解决这类问题而设计的。该工具包包含两个主要文件:`sql/oracle汉字转拼音package...
《Oracle9i入门与提高(中文版)》是一本针对初学者和有一定基础的数据库管理员设计的教程,全面覆盖了Oracle9i的核心概念、安装配置、管理操作、SQL语言使用以及数据库开发等多个方面。这本书籍旨在帮助读者快速掌握...
而将汉字转换为拼音,就需要借助特定的算法和字典库,比如Pinyin4j在Java中的应用,或者在Oracle中使用预定义的函数和存储过程。 在Oracle中,由于没有内置的汉字转拼音功能,我们需要自己编写存储过程。"pkg_...
在对A表中的日期字段进行格式转换时,例如将'2017-08-05'格式的日期转换为'2017年8月5日'这样的中文表述格式,可以使用to_char函数结合to_date函数进行操作。具体的SQL语句如下: ```sql select to_char(to_date(tt...
10. **数据仓库与OLAP**:Oracle支持构建数据仓库,通过ETL(Extract, Transform, Load)过程将运营数据转化为分析数据。OLAP(Online Analytical Processing)功能提供了多维数据分析和快速查询的能力。 以上只是...
在本篇文章中,我们将深入探讨如何使用Oracle函数将汉字转化为拼音。 首先,`UTL_I18N`包中的`RICH_TO_RAW`函数是关键。这个函数可以将Unicode字符转换为其对应的RAW格式,这对于处理汉字到拼音的转换至关重要。当...
汉字转化成拼音,在ORACLE已经用了一段时间了,能够正常转换,有需要的朋友可以下载看看
《Oracle专家高级编程》是Thomas Kyte所著的《Expert One on One: Oracle》一书的中文翻译版,这本书在IT领域尤其是Oracle数据库管理与优化方面具有极高的权威性。Kyte先生是Oracle技术界的知名专家,他的著作深入浅...