oracle中的varchar2能和double直接计算吗?

比如:selectt2.*,round(t2.TRADE/t2.TECH,2)asabfrom....t2.TRADE(varchar2)t2.TECH(double)... 比如:
select
t2.*,round(t2.TRADE/t2.TECH,2) as ab
from
....
t2.TRADE(varchar2)
t2.TECH(double)
展开
 我来答
psychic0111
2013-06-19 · TA获得超过999个赞
知道小有建树答主
回答量:463
采纳率:100%
帮助的人:224万
展开全部

隐式转换是ORACLE自己去处理的,有一些规则:

  1. 对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型。

  2. 对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型,

    例如:假设id列的数据类型为varchar2 ,select * from t where id=1,这里的id会自动转为number型。一个字符型和一个number型比较,ORACLE会把字符型转换成number,当一个字符型和一个日期型比较,ORACLE会把字符型转换成日期型(如果可以,即字符的格式符合session定义的nls_date_format),不然会报错。

  3. 如果调用函数或过程等时,如果输入参数的数据类型与函数或者过程定义的参数数据类型不一致,则oracle会把输入参数的数据类型转换为函数或者过程定义的数据类型

  4. 赋值时,oracle会把等号右边的数据类型转换为左边的数据类型

  5. 用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型

  6. 如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则oracle会将字符类型的数据转换为合适的数据类型,即这些数据类型可能是number、date、rowid等。如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之间作算术运算,则oracle会将她们都转换为number类型的数据再做比较(你的问题属于这种情况)。

  7. 比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集。

簡單e丶
2013-06-19
知道答主
回答量:14
采纳率:0%
帮助的人:1.3万
展开全部
可以计算,但存在隐式转换,当TRADE转换不了为数字的时候就会抛出oracle异常
追问
怎么隐式转换啊,,,我想了解更细点
追答
隐式转换时oracle系统内部运算的时候进行的类型转换,不需要手动调用,但是会消耗一定的性能,编写代码时应尽量避免隐式转换,如有一个字段类型是varchar2类型,如果对其使用数值运算符,oracle系统会转化为number类型进行运算,如果不是数字类型的字符,就会抛出ORA-01722: 无效数字的异常。才疏学浅,见谅。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式