|
Программирование >> Преобразование значений null
Учитывая приведенный выше результат, вызов 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |