与前导零连接几个月 - 不是有效的月份错误
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
我想在 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