concat在做什么?

时间:2019-05-09 18:33:48

标签: sql oracle

这段代码中的'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

2 个答案:

答案 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)

09TO_CHAR函数中用于格式化数字的格式定义。前导零将添加到单个数字。

示例:7将以07的形式返回

有关不同格式的更多详细信息,请参见Oracle Format Models