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

1 ... 96 97 98 [ 99 ] 100 101 102 ... 219


Обратите внимание, что для каждого дня месяца также возвращаются информация о том, какой это день недели, и соответствующий ISO-но-мер недели. Чтобы получить дни только интересующего нас месяца, возвращаем строки, где CURR MTH = MTH (месяц, к которому относится день, должен быть текущим месяцем). На данном этапе для каждого дня текущего месяца возвращаются: двузначный номер дня месяца, двузначный номер месяца, однозначный номер дня недели (1-7 для Вс.-Сб.) и двузначный ISO-номер недели. Следующий шаг - с помощью выражения CASE определить, на какой день недели выпадает каждое из значений столбца DM (каждый день месяца). Результаты частично показны ниже:

select case dw when 2 then dm end as Mo,

case dw when 3 then dm end as Tu,

case dw when 4 then dm end as We,

case dw when 5 then dm end as Th,

case dw when 6 then dm end as Fr,

case dw when 7 then dm end as Sa,

case dw when 1 then dm end as Su from ( select * from (

select cast(date trunc(month,current date) as date)+x.id, 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 dw,

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) ) x

where mth = curr mth ) y

WK MO TU WE TH FR SA SU

22 01 22 02

22 03



22 04

22 05

23 0b

23 07 23 08 23 09

23 10

23 11

23 12

Как видим из частичного вывода, каждый день недели возвращен в отдельной строке, и его номер располагается в столбце, соответствующем дню недели, на который данный день выпадает. Теперь наша задача - свести все дни одной недели в одну строку. Для этого используем агрегатную функцию MAX и группировку строк по столбцу WK (ISO-номеру недели). В результате все дни каждой недели будут выведены в одной строке, как и в обычных календарях. Чтобы обеспечить правильное расположение дней, упорядочиваем результаты по WK. Окончательный вывод показан ниже:

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 6 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 date)+x.id, 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 dw,

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) ) x



where mth = curr mth

) y group by wk order by wk

MO TU WE TH FR SA SU

01 02 03 04 05

06 07 08 09 10 11 12

13 14 15 16 17 18 19

20 21 22 23 24 25 26 27 28 29 30

MySQL

Первый шаг - возвратить в отдельной строке каждый день месяца, для которого создается календарь. Для этого выполняем запрос к таблице T500. Добавляя каждое возвращаемое T500 значение к первому дню месяца, получаем все дни месяца.

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

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

adddate(current date,

-dayofmonth(current date)+1),

%m) mth

from t1

DY MT

01-JUN-2005 06

Следующий шаг - получить все дни месяца, начиная с первого. Обратите внимание, что для каждого дня месяца возвращаются также соответствующий ему день недели и ISO-номер недели. Чтобы гарантировать выбор дней только интересующего нас месяца, возвращаем строки, где месяц, к которому относится день, является текущим месяцем. Строки, возвращаемые вложенным запросом Y, частично показаны ниже:

select date format(dy,%u) wk, date format(dy,%d) dm, date format(dy,%w)+1 dw from (

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

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



1 ... 96 97 98 [ 99 ] 100 101 102 ... 219

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