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

1 ... 89 90 91 [ 92 ] 93 94 95 ... 219


Учитывая приведенный выше результат, вызов GENERATE SERIES в операторе FROM будет выглядеть так: GENERATE SERIES ( 0, 364 ). Если текущий год является високосным, как, например, 2004, то второй параметр будет равен 365.

После формирования списка дат года следующий шаг - добавление значений, возвращенных GENERATE SERIES, к первому дню текущего года. Результаты частично показаны ниже:

select cast(date trunc(year,current date) as date) + x.id as dy from generate series ( 0,

( select cast( cast(

date trunc(year,current date) as date) + interval 1 years as date) - cast(

date trunc(year,current date) as date) )-1

) x(id)

01-JAN-2005

15-FEB-2005 22-NOV-2005

31-DEC-2005

Завершающий шаг - с использованием функции TO CHAR выбрать только пятницы.

MySQL

Чтобы выбрать все пятницы текущего года, необходимо возвратить все дни текущего года. Первый шаг - с помощью функции DAYOFYEAR найти первый день года. Вычитаем из текущей даты значение, возвращенное DAYOFYEAR(CURRENT DATE), и затем добавляем 1, чтобы

получить первый день текущего года:

select adddate(

adddate(current date,

date trunc(year,current date) as date) + interval 1 years as date) - cast(

date trunc(year,current date) as date)-1 as cnt from t1



interval -dayofyear(current date) day), interval 1 day ) dy

from t1

01-JAN-2005

Затем используем таблицу T500, чтобы получить количество строк, соответствующее количеству дней текущего года. Сделать это можно, последовательно добавляя значения столбца T500.ID к первому дню года, до тех пор пока не будет достигнут первый день следующего года. Результаты этой операции частично представлены ниже:

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

from ( select dy, year(dy) yr

from ( select adddate(

adddate(current date,

interval -dayofyear(current date) day), interval 1 day ) dy

from t1

) tmp1

) x, t500

where year(adddate(x.dy,interval t500.id-1 day)) = x.yr

01-JAN-2005 15-FEB-2005 22-NOV-2005

31-DEC-2005

Завершающий шаг - с использованием функции DAYNAME выбрать только пятницы.

SQL Server

Чтобы выбрать все пятницы текущего года, необходимо получить все дни текущего года. Первый шаг - с помощью функции DATEPART найти первый день года. Вычитаем из текущей даты значение, возвращенное DATEPART(DY,GETDATE()), и затем добавляем 1, чтобы получить первый день текущего года

select getdate()-datepart(dy,getdate())+1 dy from t1

01-JAN-2005



31-DEC-2005

Наконец, с помощью функции DATENAME выбираем только те строки, которые соответствуют пятницам. Чтобы данное решение было работоспособным, значение параметра MAXRECURSION должно быть задано не менее 366 (ограничение количества дней в году в рекурсивном представлении Х гарантирует невозможность получения более 366 строк).

Определение дат первого и последнего появления заданного дня недели

Задача

Требуется найти, например, первый и последний понедельники текущего месяца.

Решение

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

Имея первый день года, с помощью оператора WITH и функции DATEADD реализуем многократное добавление одного дня, начиная с первого дня года, до тех пор пока не будет получен первый день следующего года. Результирующее множество будет включать все дни текущего года (строки, возвращенные рекурсивным представлением Х, частично показаны ниже):

with x (dy,yr) as (

select dy, year(dy) yr

from (

select getdate()-datepart(dy,getdate())+1 dy

from t1

) tmp1

union all

select dateadd(dd,1,dy), yr

from x

where year(dateadd(dd,1,dy)) = yr

select x.dy

from x

option (maxrecursion 400)

01-JAN-2005 15-FEB-2005 22-NOV-2005



1 ... 89 90 91 [ 92 ] 93 94 95 ... 219

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