前に上げた再帰結合をちょこっと変えただけ。
因みにSQLServer。
DECLARE @from datetime = '2001-01-01';
DECLARE @to datetime = '2012-10-01';
WITH l_date(v_date) as (
SELECT CONVERT(DATETIME,@from) v_date
UNION ALL
SELECT DATEADD(mm, 1, l.v_date) v_date
FROM l_date l
WHERE v_date < @to
)
SELECT v_date
FROM l_date
最近よく使うので残しとく。