oracle什么时候隐式转换日期类型?它取决于什么参数?
我正在运行以下内容:
SELECT SYSDATE - '01-01-01' FROM DUAL
并得到:
SELECT SYSDATE - '01-01-01' FROM DUAL
*
ERROR at line 1:
ORA-01722: invalid number
为什么 Oracle 不将 varchar '01-01-01' 转换为日期?
nls_date_format I have set to 'DD-MM-RR'
当尝试将字符串转换为数字,但无法将字符串转换为有效数字时,会出现 ORA-01722(“无效数字”)错误。
Nls_date_format 参数有助于将 varchar 隐式转换为日期类型。
例子:
在上面的示例中,隐式类型转换发生在我们设置
NLS_DATE_FORMAT
. 在你的情况下,它试图从 SYSDATE 中提取数字(或者你可以明确地告诉)但发现字符串不是日期。例子:
在这里这完美地工作并返回从 SYSDATE 中减去 1 天的日期,因为它能够将字符串转换为数字。
最好的方法是将 varchar 显式转换为日期类型。您可以使用以下查询从 sysdate 中减去日期(假设您已设置 NLS_DATE_FORMAT=DD-MM-RR):
Oracle 建议使用显式类型转换。