Я бы предложил использовать to_date(your_date,'d')
, как упоминает @Джефф Мур.Однако я бы также предложил избавиться от for..loop
.В качестве бонуса это добавит все дни любого данного года, в отличие от вашей версии, что создаст дополнительный день для високосных годов:
INSERT INTO MY_TABLE (ID, MY_DATE)
SELECT lvl, dt
FROM ( SELECT LEVEL lvl,
TO_DATE('1/1/2011', 'mm/dd/yyyy') + LEVEL - 1 dt
FROM DUAL
CONNECT BY TO_DATE('1/1/2011', 'mm/dd/yyyy') + LEVEL - 1 <
ADD_MONTHS(TO_DATE('1/1/2011', 'mm/dd/yyyy'), 12))
WHERE TO_CHAR(dt, 'd') NOT IN (1, 7)
Если вы хотите, чтобы столбец «ID» был смежным, выможно использовать rownum
вместо lvl
во внешнем запросе.