|
Программирование >> Преобразование значений null
22 from x 23 group by wk 24 order by wk PostgreSQL Чтобы возвратить все дни текущего месяца, используйте функцию GENERATE SERIES. Затем разбейте месяц на недели по выбранному дню с помощью выражений CASE и функций MAX:
Чтобы возвратить все дни текущего месяца, используйте таблицу T500. Затем разбейте месяц на недели по выбранному дню с помощью выражений CASE и функций MAX:
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,
Обсуждение 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 (
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |