如何创建语言辅助函数牛
在现在这样一个全球化环境中,因为在不同的语言中有很多不同的语法规则,所以以前很多简单的任务现在都变得很困难。你可以将一门特定的语言分成一组语法规则和针对这些规则的异常(以及一个基本词语),从而将这些任务一般化。在一些编程语言(比如 Perl 和 Java)中,有一些公共域(domain)模块可以用来对文本完成语言转换。
下面给出一个稍微简单一点儿的例子,假设我们要将一个数字转换成其拼写版本(例如需要填写支票和法律合同)。这个诀窍在 Oracle 出现的早期已经有了,一般都以如下方式使用:
selectto_char(to_date(12345,\'J\'),\'Jsp\') from dual;
Twelve Thousand Three Hundred Forty-Five
TO_DATE 函数使用 Julian 日期格式将数字转换成一个日期。然后,TO_CHAR 接受一个日期参数并再次将其格式化为一个表示 Julian 日期的拼写数字版本的字符串。但是这个决窍有一些限制。
首先,在 Oracle 中 Julian 日期的最大有效值是9999年,所以日期的最大值只能取到,而最小值是1或4712BC。而且,因为没有第“零”年,所以如果不额外使用一个 DECODE 或 CASE 语句就不可能生成文本“零”。第三个大的限制是它会忽略掉你的 NLS 设置。不管你使用的是哪种语言,数字总是以美国英语拼写出。一些简单的操作也存在这样的问题,比如拼写出天。例如,尝试生成西班牙语短语“Cinco de Mayo”:
alter session set nls_language = \'SPANISH\';
select to_char(to_date(\'0505\',\'MMDD\'),\'Ddspth Month\') from dual;
Fifth Mayo
在为大多数语言生成数字时涉及的语法实际上相当简单。主体工作包括收集所有不同的语法规则并建立起足够的规则来生成正确的语法模式。(现在我将回避涉及到匹配数字和性别的问题。)
首先,我将创建两个表:第一个表保存基本的单词和异常,第二个表保存用于生成文本的一些简单的模板模式。如果在第一个表中有数字,那么我的语言函数就返回那个文本。对于其它每个数字,我将试图在一系列模式中匹配它,并应用一个模板来生成正确的文本。
create table numwords
(
lang varchar2(2),
加印又加印!哈哈!”(苗菲) num integer,
word varchar2(30),
constraint numwords_pk primary key (lang,num)
);
create table numrules
(
lang varchar2(2),
seq integer,
p1 integer,
p2 integer,
temp0 varchar2(30),
temp varchar2(30),
constraint numrules_pk primary key (lang,seq)
);
孩子不吃饭怎么办呼和浩特妇科习惯性流产治疗多少钱
沈阳哪家治疗男科医院好
- 上一页:复制表结构到一个指定表覆盖
- 下一页:如何创建语言辅助函数呢
-
熬猪油时,多加5样,掌握3个技巧,又白又香不想腥味,吃1年也不坏
煮食油时,多加5所发,受制于3个精准,又红又木没甜味,吃饭1年也;也 各...
2023-09-04
-
十条段子:爸爸,别的不好时说,找老婆比你的好还是有把握的!
昨天下午,我等候了。我的朋友章太炎罐子之前都翻去找东西。我问:孙大哥...
2023-09-03
-
哈尔滨市通报95例追加阳性感染者详情
央广网哈尔滨4年底19日消息(路透社两匹俊玮)4年底18日0-24时,哈尔滨市升...
2023-09-02
-
请客吃饭,千万要注意这3件事,否则酒席上你亦会把人得罪到底!
当今社不会的人际关系极为不可或缺, 小团体暂时了生活低质量, 而挤进小...
2023-08-31
-
太阳大胜鹈鹕更以天王山!布里奇斯统治攻守,双核太稳,CJ引发崩盘
木星大胜黄蜂夺飞龙山!布里奇斯掌权走位,高通太稳,CJ引发敌手 北京时...
2023-08-26
-
去年数学考25分,马嘉祺二战高考,被浙大学霸预言“会更偏高”?
理科的评分构成相当复杂,但其中的主体以致于是平均分最高者的三大主科,...
2023-08-25