oracle - Oracle 的 CAST ON CONVERSION ERROR 是否有问题?
问题描述
我第一次尝试使用 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
条款,有缺陷?
解决方案
--使用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;
推荐阅读
- angular - Accessibilty - 在 Angular 中更改路线时失去焦点
- c# - 从 ASP.Net Core 3.0 升级到 .net Core 3.1 后,IIS 托管的 Aps.Net API 失败
- kotlin - Kotlin:对嵌套属性使用 .contains()
- node.js - 如果我为 from 和 to 选择相同的日期,则不会获取数据
- java - ZonedDateTime ISO-8601 解析:为什么需要时区 ID 中的冒号?
- synchronization - 没有 vkQueuePresentKHR() 的 Vulkan 渲染完成同步
- c - 程序的 strtok 部分的越野车
- angular - ERROR 错误:formGroup 需要一个 FormGroup 实例。请通过一个。有2个部分
- sql-server - Ms sql中的日期转换问题
- c# - 如何解析通过 TCP/IP 接收的 Json?