Oracle怎样把varchar2型转成number型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle怎样把varchar2型转成number型相关的知识,希望对你有一定的参考价值。

oracle中纯数字的varchar2类型和number类型自动转换:
比如:

两个表的字段定义了不同的类型。一个字段是varchar2类型,另一个字段是number类型,内容如下:\'00187\'和187。在使用中发现会自动将varchar2类型转换为number,即187和187。
测试的sql:
select
case when \'0110\' = 110 then
\'true\'
else
\'false\'
end
from dual;
------------
select
case when to_number(\'0110\') = to_number(110) then
\'true\'
else
\'false\'
end
from dual;
结论:结果都是true。为了保险起见还是用to_number()进行转换更好一些。
参考技术A 用to_number函数。
但前提是varchar2中存放的数据必须是数字型字符。
如存放的是类似123 或者 1.23等可以to_number(123)或to_number(1.23)
如果存放其他字符,则会报错
参考技术B 1、如果只是查询的时候转换,只要加to_number 函数就可以了。

2、如果想修改表的字段类型,直接修改会报错:
ORA-01439: 要更改数据类型, 则要修改的列必须为空
解决方法参考下面的知道链接:

http://zhidao.baidu.com/link?url=VOj5m4F2Xd1iP1EdT8TTxQsX7Uah7Bc6oPpeFlAL1_rRhBkRTQQ-eTc2Xoc_GacssB9dM8ZqEmSKT86E6g1sR_
3、还有一种解决办法是使用虚拟列,不需要删掉原来的字段。例如:
alter table t add (numCol as (to_number(varCol))) ;
需要11g支持,需要保证字段里面数据库的规范性。(需要提前修改一下源字段的名称)

Python之str型转成int型

str转int:

1 def fn(x,y):
2     return x*10+y
3 
4 def char2num(s):
5     return {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}[s]  # 特别注意这里,后面还有个 [s]
6 
7 print(type(reduce(fn, map(char2num, 1738785))))
8 print(reduce(fn, map(char2num, 1738785)))

输出如下:

1 <type int>
2 1738785

整理成一个 str2int 函数就是如下喽:

 1 from functools import reduce
 2 
 3 def str2int(s):
 4     def fn(x,y):
 5         return x*10+y
 6     def char2num(s):
 7         return {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}[s]
 8     return reduce(fn,map(char2num,s))
 9 
10 print(str2int(365779))
11 print(type(str2int(365779)))

 

用匿名函数lambda再简化一下就成了下面这个样子:

1 def str2int(s):
2     return reduce(lambda x,y:x*10+y, map(lambda s:{0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}[s], s))

WOC,就一行代码哦,够简单!

 

以上是关于Oracle怎样把varchar2型转成number型的主要内容,如果未能解决你的问题,请参考以下文章

Oracle怎样把varchar2型转成number型

C语言中怎么把Int型转成字符型?

怎么把一个object 型转成 键值对呢? 如 我要做个统一的插入 Add(object obj) ....

oracle中clob可以转成varchar2吗

Oracle中表列由VARCHAR2类型改成CLOB

oracle 怎么把clob转换成string pb