1

我第一次尝试使用 Oracle 的CAST子句ON CONVERSION ERROR,结果不是我所期望的。

让我们从CAST没有子句开始:

SELECT CAST(123456  AS NUMBER(1,0)) FROM DUAL;

ORA-01438: "value larger than specified precision allowed for this column"

数字 123456 比NUMBER(1,0). 它不会以某种方式神奇地截断为一位数,但会引发错误。好的。这是我预期会发生的。

SELECT CAST('123456'  AS VARCHAR2(4 CHAR)) FROM DUAL;

Result = '1234'

字符串 '123456' 比VARCHAR2(4 CHAR). 它不适合。我必须承认,我预计数字会出现转换错误,而不是字符串被破坏。

SELECT CAST(123456  AS NUMBER(1,0) DEFAULT -1 ON CONVERSION ERROR) FROM DUAL;

Result: 123456

那个怎么样?突然没有问题 123456 不适合NUMBER(1,0),返回整数?

SELECT CAST('123456'  AS VARCHAR2(4 CHAR) DEFAULT 'too long' ON CONVERSION ERROR) FROM DUAL;

ORA-00907: "missing right parenthesis" at position 43

我一遍又一遍地看;我在这里看不到任何缺少的括号。

我的想法有问题吗?或者是CAST,特别是关于ON CONVERSION ERROR条款,有缺陷?

4

2 回答 2

0

--使用TRUNC关键字转换为基准日期,

with src as( select to_date('05-APR-2021', 'DD-MON-YYYY') as sourcetest from dual union all
   select to_date('04/05/2021', 'MM/DD/YYYY') as sourcetest from dual )
seLect sourcetest 
    ,trunc(sourcetest) as trunc_date
    ,to_char(trunc(sourcetest), 'YYYY-MM-DD') as to_char_fmt
    --,validate_conversion(sourcetest as date) as test_result   --missing right parenthesis error!!!!!
from src;
于 2021-01-05T15:40:15.080 回答
0

关于。请参阅此链接ON CONVERSION ERROR中的表格。只有那些用 标记的转换才能使用。您还可以阅读更多详细信息Casting Built-In Data TypesNote3ON CONVERSION ERRORNote3

对于您的第二个问题,您必须提及format之后ON CONVERSION ERROR,您可以在TO_NUMBER

  SELECT CAST(123456  AS number(1,0) DEFAULT -1 ON CONVERSION ERROR,9) FROM 
  DUAL;
于 2020-04-24T07:44:22.613 回答