|
Программирование >> Преобразование значений null
С помощью функции ADD MONTHS найдите начальную и конечную даты каждого квартала. Для представления квартала, которому соответствуют та или иная начальная и конечная даты, используйте псевдостолбец ROWNUM (номер строки). В следующем решении для формирования четырех строк используется таблица EMP: 1 select rownum qtr, 2 add months(trunc(sysdate,y),(rownum-1)*3) q start, 3 add months(trunc(sysdate,y),rownum*3)-1 q end 4 from emp 5 where rownum <= 4 PostgreSQL Используйте функцию GENERATE SERIES для получения требуемых четырех кварталов. С помощью функции DATE TRUNC от дат, возвращенных для каждого квартала, отсеките день, оставляя лишь год и месяц. Используя функцию TO CHAR, установите соответствие между кварталом и начальной и конечной датами: 1 select to char(dy,Q) as QTR, 2 date( 3 date trunc(month,dy)-(2*interval 1 month) 4 ) as Q start, 1 01-JAN-2005 31-MAR-2005 2 01-APR-2005 30-JUN-2005 3 01-JUL-2005 30-SEP-2005 4 01-OCT-2005 31-DEC-2005 Для формирования четырех строк используйте таблицу EMP и ранжирующую функцию ROW NUMBER OVER. В качестве альтернативы строки можно создать с помощью оператора WITH (как во многих рецептах) или запроса к таблице, содержащей не менее четырех строк. В следующем решении используется функция ROW NUMBER OVER: 5 dy as Q end 6 from ( 7 select date(dy+((rn*3) * interval 1 month))-1 as dy 8 from ( 9 select rn, date(date trunc(year,current date)) as dy 10 from generate series(1,4) gs(rn) 11 ) x 12 ) y MySQL Используйте таблицу T500, чтобы получить четрые строки (по одной для каждого квартала). Даты начала и конца каждого квартала вычисляются с помощью функций DATEADD и ADDDATE. Используя функцию QUARTER, установите соответствие между кварталом и начальной и конечной датами:
SQL Server Четыре строки сформируйте с помощью рекурсивного оператора WITH. Посредством функции DATEADD найдите начальную и конечную даты. Используя функцию DATEPART, установите соответствие между кварталом и начальной и конечной датами: 1 with x (dy,cnt) 2 as ( 3 select dateadd(d,-(datepart(dy,getdate())-1),getdate()), 5 from t1 6 union all 7 select dateadd(m,3,dy), cnt+1 8 from x 9 where cnt+1 <= 4 10 ) 11 select datepart(q,dateadd(d,-1,dy)) QTR, 12 dateadd(m,-3,dy) Q start, 13 dateadd(d,-1,dy) Q end 14 from x 15 order by 1 Следующий шаг - найти первый день года и добавить к нему n месяцев, где n - значение столбца RN, увеличенное в три раза (к первому дню года добавляется 3, 6, 9 и 12 месяцев). Результаты представлены ниже: select (current date - (dayofyear(current date)-1) day + (rn*3) month) dy from ( select row number()over() rn from emp fetch first 4 rows only ) x 01-APR-2005 01-JUL-2005 01-OCT-2005 01-JAN-2005 На данный момент в столбце DY выведены даты, соответствующие следующему дню после окончания каждого квартала. Следующий шаг -получить даты начала и конца каждого квартала. Чтобы получить дату окончания квартала, вычитаем один день из DY. Чтобы получить дату начала квартала, вычитаем три месяца из DY. Используем функцию QUARTER с параметром DY минус 1 (дата окончания каждого квартала), чтобы определить, какому кварталу соответствуют полученные начальная и конечная даты. Обсуждение DB2 Первый шаг - получить четыре строки (со значениями от 1 до 4), по одной для каждого квартала года. Вложенный запрос Х с помощью ранжирующей функции ROWNUMBER OVER и оператора FETCH FIRST возвращает из таблицы EMP всего четыре строки. Результаты показаны ниже: select row number()over() rn from emp fetch first 4 rows only
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |