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

1 ... 84 85 86 [ 87 ] 88 89 90 ... 219


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



1 ... 84 85 86 [ 87 ] 88 89 90 ... 219

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