[英]concatenate with leading zeros for months - not a valid month error
我想在 oracle 中将字符串与年份连接起来。 字符串是月份。 查询是
select to_date('11'||EXTRACT(YEAR FROM SYSDATE)-1,'MMYYYY') from dual;
这个查询很好,但是如果字符串是“01”或任何以零开头的东西,我得到的不是一个有效的月份错误。
select to_date('04'||EXTRACT(YEAR FROM SYSDATE)-1,'MMYYYY') from dual;
select to_date('05'||EXTRACT(YEAR FROM SYSDATE)-1,'MMYYYY') from dual;
让我们在没有to_date(..., ...)
包装器的情况下运行它:
select '04'||EXTRACT(YEAR FROM SYSDATE)-1 from dual;
'04'||EXTRACT(YEARFROMSYSDATE)-1
--------------------------------
42019
你看到问题了吗? (请注意,结果是一个数字,甚至不是字符串。)
在减去 1 之前执行连接。首先得到字符串 '042020',然后减去 1; 字符串被转换为数字,你得到结果 42019。当你应用TO_DATE()
时,它被转换回字符串,Oracle 会阻塞的第一件事是一个月的42
。
在算术运算周围使用括号强制首先执行减法,它将起作用:
select to_date('04'||(EXTRACT(YEAR FROM SYSDATE)-1), 'MMYYYY') from dual;
TO_DATE('04'||(EXTR
-------------------
2019-04-01 00:00:00
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.