'09'
является частью вызова to_char()
, а не concat()
. Это модель формата , применяемая к извлеченному номеру месяца, когда он преобразуется в строку. Без этого вы бы получили 5
:
select TO_CHAR(EXTRACT(MONTH FROM sysdate))
from dual;
TO_CHAR(EXTRACT(MONTHFROMSYSDATE))
----------------------------------------
5
Указание этой маски формата означает, что вы получаете ведущий ноль для номеров месяцев ниже десяти.
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