Программирование >>  Преобразование значений null 

1 ... 99 100 101 [ 102 ] 103 104 105 ... 219


select

quarter(dy-1 day) QTR,

dy-3 month Q start,

dy-1 day Q end

from

select

(current date -

(dayofyear(current date)-1)

+ (rn*3) month) dy

from

select

row number()over() rn

from

fetch

first 4 rows only

Oracle

С помощью функции 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, установите соответствие между кварталом и начальной и конечной датами:

select

quarter(adddate(dy,-1)) QTR,

date add(dy,interval -3 month) Q start,

adddate(dy,-1) Q end

from

select

date add(dy,interval (3*id) month) dy

from

select

adddate(current date,-dayofyear(current date)+1)

from

t500

where

id <= 4

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



1 ... 99 100 101 [ 102 ] 103 104 105 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика