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型的主要内容,如果未能解决你的问题,请参考以下文章