ORACLE 存储过程 函数转换数值

现在数组里有一列值的形式是a.b这种,例如1.2、10.1,也有1、2这种自然数。要用一个函数将这列的值转换为1B、10A,自然数不用变,我现在写的函数是trunc(x)|| chr(substr(x, instr(x,'.',1,1)+1)+64)),但是只能转换带小数点的,不能包含自然数,要怎么修改呢?

感觉挺有意思的,这是我写的:

sys@orcl>select * from test;

X
----------
1.2
10.1
1
2

sys@orcl>select case when replace(translate(x,'0123456789','##########'),'#','')='.' then to_char(trunc(to_number(x))||translate(rpad(trim(substr(x,instr(x,'.',1,1)+1,length(x))),10,' '),'0123456789','ABCDEFGHIJ')) else to_char(x) end as tihuan from test;

TIHUAN
------------------------------------------------------------
1C
10B
1
2

基本上满足了你的要求,当然可能还有更简洁的方法。
楼上的方法改正如下:

sys@orcl>SELECT CASE WHEN X like '%.%' THEN trunc(x)||chr(substr(x,instr(x,'.',1,1)+1,length(x))+64) ELSE X END FROM test;

另外这个方法有个缺陷,比如:

sys@orcl>insert into test values('10.22');

已创建 1 行。

就不能取到所有小数位了。

还有就是下面情况:

sys@orcl>insert into test values('10..22');

已创建 1 行。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-10
SELECT CASE WHEN X like '%.%' THEN trunc(x)|| chr(substr(x, instr(x,'.',1,1)+1)+64)) ELSE X END FROM 表

oracle存储过程传入一个字符串参数'1,2,3,4,5,6,7,8',如何分割并转为数...
create or replace type type_split as table of varchar2(50); --创建一个type,如果为了使split函数具有通用性,请将其size 设大些。\\x0d\\x0a\\x0d\\x0a--创建function\\x0d\\x0acreate or replace function split\\x0d\\x0a(\\x0d\\x0a p_list varchar2,\\x0d\\x0a p_sep ...

oracle存储过程中如何对一个变量累加赋值 最好有个例子
1、首先打开oracle数据库,如下图所示。2、在Oracle中,对于函数的变量赋值,通常有三种方法来进行处理,直接赋值的方法,可以在声明变量的时候直接给变量进行赋值。3、其次,可以使用SELECT语句对变量进行赋值,主要是SELECT INTO语句,如下代码示例,将变量v_minvar赋予Min(t.sal)的值。4、最后就是动态...

oracle函数和存储过程有什么区别
oracle函数和存储过程有什么区别1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用.函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些...

oracle 存储过程中怎么给时间变量赋值
利用to_date函数,或者是sysdate系统值。

【oracle】定义一个Oracle存储过程,输出1~100之间的素数。
v_yes number;c_max number;begin v_num:=1;c_max:=200;--这里设置最大数,想要100这内就写100,想要1000之内就写1000 loop v_now:=2;--这里设置每一个数的初始被除数,从2开始 v_yes:=1;--设置初始参考数,1为素数,0为非素数,默认初始为1 if v_num<4 then dbms_output.put_...

15PLSQL--函数,存储过程
–RETURN return_type 返回结果类型 ,通过PLSQL程序块需要通过声明变量,将函数执行值赋值给变量 –IS\/AS 声明变量过程 –BEGIN 函数执行主体 –EXCEPTION –END;–因为函数需要返回一个值,所以 RETURN 包含返回结果的数据类型.–OR REPLACE 为可选. 有了它,可以或者创建一个新函数或者替换相同名字的...

oracle存储过程中怎么理解传入传出参数(in out)
Oracle 过程中定义了in|out|in out3中参数模式,每个参数可以选择其一 in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。举个例子 create or replace procedure update_price(p_product_id in NUMBER,p_factor in NUMBER)AS ...你在引用这个过程的时候给参数传入...

sql或者oracle自定义函数.返回值,具体有什么作用,什么情况下需要调用...
1、例如我函数一开始的参数为1,我想根据复杂的运算(函数中的转换),将他变为例如'A',就用函数返回值了啊;2、在举个例子,如果我有很多数字,例如1,11,111这样的情况,我不可能用case语句全写出来,麻烦呀,他们有规律啊,这样我就直接用函数,找出他们的规律,直接返回为A,AA,AAA这样的了 3...

oracle 通过调用存储过程,得到数据集
(1)函数function的参数必须都是in类型的,必须要有返回值 它可以被sql语句或者存储过程调用 例如:--定义一个函数,返回传入的参数本身 create or replace function TestFunOne(argsOne in varchar2) return varchar2 is resultStr varchar2(500);begin resultStr := argsOne;return(resultStr);end ...

oracle中函数和存储过程的区别和联系
函数有1个返回值,而存储过程可以有多个或者没有。函数可以在其他语句中直接调用,而存储过程必须单独调用。函数通常用于计算或较为单一的数据功能,存储过程相对完成更复杂的复合性的数据功能。最关键普通语句每次执行都要编译,而存储过程只在创建时编译之后直接调用,速度更快,在大数据复杂功能时尤其明显。...

相似回答
大家正在搜