繁体   English   中英

与前导零连接几个月 - 不是有效的月份错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM