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

1 ... 93 94 95 [ 96 ] 97 98 99 ... 219


22 from x

23 group by wk

24 order by wk

PostgreSQL

Чтобы возвратить все дни текущего месяца, используйте функцию GENERATE SERIES. Затем разбейте месяц на недели по выбранному дню с помощью выражений CASE и функций MAX:

select

max(case dw when 2 then dm end) as Mo,

max(case dw when 3 then dm end) as Tu,

max(case dw when 4 then dm end) as We,

max(case dw when 5 then dm end) as Th,

max(case dw when b then dm end) as Fr,

max(case dw when 7 then dm end) as Sa,

max(case dw when 1 then dm end) as Su

from

select

from

select

cast(date trunc(month,current date) as i

to char(

cast(

date trunc(month,current date)

as date)+x.id,iw) as wk,

to char(

cast(

date trunc(month,current date)

as date)+x.id,dd) as dm,

cast(

to char(

cast(

date trunc(month,current date)

as date)+x.id,d) as integer) as

to char(

cast(

date trunc(month,current date)

as date)+x.id,mm) as curr mth,

to char(current date,mm) as mth

from

generate series (0,31) x(id)

where

mth = curr mth

group

by wk

order

by wk

MySQL

Чтобы возвратить все дни текущего месяца, используйте таблицу T500. Затем разбейте месяц на недели по выбранному дню с помощью выражений CASE и функций MAX:



select max(case dw when

then

end)

as Mo,

max(case dw when

then

end)

as Tu,

max(case dw when

then

end)

as We,

max(case dw when

then

end)

as Th,

max(case dw when

then

end)

as Fr,

max(case dw when

then

end)

as Sa,

max(case dw when

then

end)

as Su

8 from (

9 select date format(dy,%u) wk,

10 date format(dy,%d) dm,

11 date format(dy,%w)+1 dw

12 from (

13 select adddate(x.dy,t500.id-1) dy,

14 x.mth

15 from (

16 select adddate(current date,-dayofmonth(current date)+1) dy,

17 date format(

18 adddate(current date,

19 -dayofmonth(current date)+1),

20 %m) mth

21 from t1

22 ) x,

23 t500

24 where t500.id <= 31

25 and date format(adddate(x.dy,t500.id-1),%m) = x.mth

26 ) y

27 ) z

28 group by wk

29 order by wk

SQL Server

Чтобы возвратить все дни текущего месяца, используйте рекурсивный оператор WITH. Затем разбейте месяц на недели по выбранному дню с помощью выражений CASE и функций MAX:

1 with x(dy,dm,mth,dw,wk)

2 as (

3 select dy,

4 day(dy) dm,

5 datepart(m,dy) mth,

6 datepart(dw,dy) dw,

7 case when datepart(dw,dy) = 1

8 then datepart(ww,dy)-1

9 else datepart(ww,dy)

10 end wk

11 from (

12 select dateadd(day,-day(getdate())+1,getdate()) dy

13 from t1

14 ) x

15 union all

16 select dateadd(d,1,dy), day(dateadd(d,1,dy)), mth,



datepart(dw,dateadd(d,1,dy)),

case when datepart(dw,dateadd(d,1,dy)) =

then datepart(wk,dateadd(d,1,dy))-1

else datepart(wk,dateadd(d,1,dy))

from x

where datepart(m,dateadd(d,1,dy)) = mth

select

max(case dw when 2 then dm end) as Mo,

max(case dw when 3 then dm end) as Tu,

max(case dw when 4 then dm end) as We,

max(case dw when 5 then dm end) as Th,

max(case dw when b then dm end) as Fr,

max(case dw when 7 then dm end) as Sa,

max(case dw when 1 then dm end) as Su

from

group

by wk

order

by wk

Обсуждение DB2

Первый шаг - возвратить все дни месяца, для которого создается календарь. Для этого используется рекурсивный оператор WITH (если WITH недоступен, можно применять сводную таблицу, например, T500, как в решении для MySQL). Кроме всех дней месяца (столбец под псевдонимом DM), понадобится возвратить разные составляющие каждой даты: порядковый номер дня недели (под псевдонимом DW), текущий месяц (под псевдонимом MTH) и ISO-номер недели для каждого дня месяца (под псевдонимом WK). Результаты, возвращаемые рекурсивным представлением Х до проведения рекурсии (верхняя часть оператора UNION ALL), показаны ниже:

select (current date -day(current date) day +1 day) dy,

day((current date -day(current date) day +1 day)) dm, month(current date) mth,

dayofweek(current date -day(current date) day +1 day) dw, week iso(current date -day(current date) day +1 day) wk from t1

DY DM MTH DW WK

01-JUN-2005 01 0b 4 22

Далее пошагово увеличиваем значение столбца DM (перебираем дни месяца), до тех пор пока не будут возвращены все дни данного месяца. Для каждого дня месяца при этом также будут получены соответствующий ему день недели и ISO-номер недели, в которую попадает данный день. Результаты частично показаны ниже:

with x(dy,dm,mth,dw,wk) as (



1 ... 93 94 95 [ 96 ] 97 98 99 ... 219

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