|
Программирование >> Преобразование значений null
28-FEB-2005 02 Заключительный шаг - с помощью функции MAX выбрать последний день февраля. К полученному значению применяется функция TO CHAR, которая возвратит 28 или 29. MySQL Первый шаг - найти первый день текущего года, вычитая из текущей даты количество прошедших до нее дней года и затем прибавляя один день. Все это делает функция DATE ADD: select date add( date add(current date, interval -dayofyear(current date) day), interval 1 day) dy from t1 01-JAN-2005 После этого добавляем один месяц, опять же используя функцию DATE ADD: select date add( date add( date add(current date, interval -dayofyear(current date) day), interval 1 day), interval 1 month) dy from t1 01-FEB-2005 Добравшись до февраля, используем функцию LAST DAY, чтобы найти последний день месяца: select last day( date add( date add( from t1 ) tmp1 ) tmp2, generate series (0,29) x(id) where to char(tmp2.dy+x.id,MM) = tmp2.mth DY MTH 01-FEB-2005 02 10-FEB-2005 02 01-FEB-2005 Далее возвращаем первый день февраля и порядковый номер февраля: select dy, month(dy) mth from ( select dateadd(mm,1,(getdate()-datepart(dy,getdate()))+1) dy from t1 ) tmp1 DY MTH 01-FEB-2005 2 Используем рекурсивные возможности оператора WITH и добавляем по одному дню к DY, возвращаемому вложенным запросом TMP1, до тех пор пока не дойдем до марта (результаты частично показаны ниже): with x (dy,mth) as ( select dy, month(dy) from ( select dateadd(mm,1,(getdate()-datepart(dy,getdate()))+1) dy from t1 ) tmp1 union all date add(current date, interval -dayofyear(current date) day), interval 1 day), interval 1 month)) dy from t1 28-FEB-2005 Заключительный шаг (необязательный) - использовать функцию DAY, чтобы возвратить 28 или 29. SQL Server В данном решении для получения всех дней февраля используется рекурсивный оператор WITH. Первый шаг - найти первый день февраля. Для этого ищем первый день текущего года, вычитая из текущей даты количество прошедших до нее дней года и затем прибавляя один день. Получив первый день текущего года, с помощью функции DATEADD добавляем к нему один месяц, чтобы перейти к первому дню февраля: select dateadd(mm,1,(getdate()-datepart(dy,getdate()))+1) dy from t1 select dateadd(dd,1,dy), mth from x where month(dateadd(dd,1,dy)) = mth select dy,mth from x DY MTH 01-FEB-2005 02 10-FEB-2005 02 28-FEB-2005 02 Теперь, возвратив все дни февраля, с помощью функции MAX определяем последний день. Как необязательный заключительный шаг можно использовать функцию DAY, чтобы получить только число 28 или 29, а не всю дату. Как определить количество дней в году Задача Требуется подсчитать количество дней в текущем году. Решение Количество дней в текущем году - это разница между первым днем следующего года и первым днем текущего года (в днях). Каждое решение включает в себя следующие этапы: 1. Определение первого дня текущего года. 2. Добавление одного года к этой дате (для получения первого дня следующего года). 3. Вычитание текущего года из результата шага 2. Решения отличаются только используемыми встроенными функциями. С помощью функции DAYOFYEAR найдите первый день текущего года и определите количество дней в текущем году, используя функцию DAYS: 1 select days((curr year + 1 year)) - days(curr year) 2 from ( 3 select (current date - 4 dayofyear(current date) day + 5 1 day) curr year 6 from t1 7 ) x
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |