我可以通过一些对Oracle的VARCHAR2?(Can I pass a number for v

2019-06-24 02:51发布

我有一个Oracle表和列( col1 )具有类型varchar2(12 byte) 。 它有一个排和值col11234

当我说

select * from table where col1 = 1234

甲骨文表示无效号码。 这是为什么? 为什么我不能通过一些,当它是varchar2

编辑:所有的反应都很大。 谢谢。 但我无法理解为什么它没有考虑1234时, 1234是一个有效的VARCHAR2数据类型。

Answer 1:

问题是,你预计甲骨文将隐式转换1234字符类型。 相反,甲骨文被隐式铸造列的数字。 有在列一个非数字的值,所以Oracle引发错误。 在Oracle文档警告说,不要隐式转换之前它解释了他们将如何得到解决。 这也解释了你所看到的行为规则是:

当用数字值进行比较的字符值,Oracle中的字符数据转换为数字值。



Answer 2:

哦,这是更好的转换为char而不是数字:

select *
from table
where col1 = to_char(1234)

当COL1看起来并不像一个数字,TO_NUMBER返回一个错误,停止查询。



Answer 3:

甲骨文表示无效号码。 这是为什么? 为什么我不能通过一些,当它是VARCHAR2?

甲骨文确实从性格类型的隐式转换col1至数,因为你比较它作为一个数字。

另外,你认为1234是多数民众赞成被提取的唯一行。 在现实中,Oracle必须从表中获取所有行,然后筛选出按在where子句。 现在有一个字符值中col1遇到你之前就是BEING进账1234行&这是造成错误,因为该字符不能被转换为数字。

这小提琴显示的行为。 由于abc canot被转换为数字,你会得到错误信息


现在,如果表中的唯一记录是包含数字字符COL1,你会看到, 声明将正常工作



文章来源: Can I pass a number for varchar2 in Oracle?