回答

收藏

在Oracle选择字符串作为数字

技术问答 技术问答 166 人阅读 | 0 人回复 | 2023-09-14

我发现了这种奇怪的行为,并感到震惊……有人有什么想法吗?9 N/ T& G% r( h+ h' U  s. E
Oracle 10g:我有两种不同的表,都叫 TESTCOL    ”的列,作为 Varchar2    (10)    ,不能为空。5 H, d& z8 n' o$ o
如果我对 table1    执行此查询将得到正确结果:$ }3 f8 t8 D5 |, \7 j' c2 a' ]! F% C
select * from table1 where TESTCOL = 1234;请注意    , 1234 …不是错字,而是动态查询,所以我会尽量不改(至少在不久的将来不会改)。) j" z( f+ J+ M2 }+ X' w6 ~; A5 y
但是,如果我在 table2    同样的查询将收到以下错误信息:
7 X6 a9 b$ @% H4 F# l1 M, IORA-01722: Invalid number这两个查询都在相同的会话和数据库上运行。  x8 n- u/ i1 q: ]
我一直通过这个列连接这两个表,它们可以正常工作,每当我尝试使用这个条件时,它们就会显示出唯一的问题。6 i! i9 X$ g. d. n: X
一张桌子和另一张桌子可能有什么不同?
/ n# t: Z9 T6 k5 X提前致谢。3 x8 U' j4 g" L1 a! M: L! K+ K( a! F
                                                               
+ A! o/ ~- L* o. c    解决方案:                                                               
* }2 F4 f& c2 v' w8 ?9 a                                                                如果TESTCOL如果包含非数字,它将是TESTCOL条目转换为数字时,Oracle可能会遇到问题。因为它的内部操作是:! L( |& E; Y8 m
select * from table1 where TO_NUMBER(TESTCOL) = 1234;如果你确定1234不能表示VARCHAR文字,请尝试执行此操作进行比较varchar值,而非数字值:
' B+ e$ v, L% Oselect * from table1 where TESTCOL = TO_CHAR(1234)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则