这段代码中的'09'在做什么?
select CONCAT(TRIM((EXTRACT(YEAR FROM TO_DATE(TO_CHAR(sysdate,'mm/dd/yyyy'),'mm/dd/yyyy')))),(TRIM((TO_CHAR(EXTRACT(MONTH FROM sysdate), '09')))))
from dual
答案 0 :(得分:2)
'09'
是to_char()
调用的一部分,而不是concat()
。当a format model转换为字符串时,将应用于提取的月份号。否则,您会得到普通的5
:
select TO_CHAR(EXTRACT(MONTH FROM sysdate))
from dual;
TO_CHAR(EXTRACT(MONTHFROMSYSDATE))
----------------------------------------
5
指定格式掩码表示月数小于10的前导零。
select TO_CHAR(EXTRACT(MONTH FROM sysdate), '09')
from dual;
TO_
---
05
然后您要缩小前导空间,但是可以通过在该蒙版中添加FM来避免这种情况:
select TO_CHAR(EXTRACT(MONTH FROM sysdate), 'FM09')
from dual;
TO_
---
05
其他地区也很奇怪;将sysdate
转换为字符串并返回日期似乎没有意义,而且您有很多不需要的括号和多余的修饰。您可以简化为:
select CONCAT(EXTRACT(YEAR FROM sysdate), TO_CHAR(EXTRACT(MONTH FROM sysdate), 'FM09'))
from dual;
CONCAT(EXTRACT(YEARFROMSYSDATE),TO_CHAR(EXT
-------------------------------------------
201905
或使用串联运算符:
select EXTRACT(YEAR FROM sysdate) || TO_CHAR(EXTRACT(MONTH FROM sysdate), 'FM09')
from dual;
EXTRACT(YEARFROMSYSDATE)||TO_CHAR(EXTRACT(M
-------------------------------------------
201905
或者根本不将年和月视为单独的数字元素:
select TO_CHAR(sysdate, 'YYYYMM')
from dual;
TO_CHA
------
201905
答案 1 :(得分:1)