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

1 ... 82 83 84 [ 85 ] 86 87 88 ... 219


Работа с датами

В данной главе представлены рецепты для поиска и обработки дат. Запросы с участием дат очень распространены. При работе с датами необходимо соответствующим образом мыслить и хорошо понимать функции, предоставляемые СУБД для обращения с такими данными. Рецепты этой главы формируют необходимый фундамент для перехода к более сложным запросам, в которых задействованы не только даты, но и время.

Прежде чем перейти к рецептам, я хочу еще раз повторить основную мысль (о которой говорилось в предисловии): эти рецепты должны использоваться как руководства к решению конкретных задач. Старайтесь думать глобально . Например, если рецепт решает задачу для текущего месяца, помните, что его можно использовать (с небольшими изменениями) для любого месяца. Повторюсь, я хочу чтобы представленные рецепты использовались как руководства, а не как абсолютный окончательный вариант. Книга не может охватить ответы на все вопросы, но если понять те решения, которые в ней представлены, то останется просто изменить их соответственно своим задачам. Советую также рассматривать все предлагаемые альтернативные версии решений. Например, если задача решается с использованием определенной предоставляемой СУБД функции, стоит потратить время и силы, чтобы узнать о возможном альтернативном решении, которое может быть более или менее эффективным по сравнению с приведенным здесь. Знание всех возможных вариантов сделает вас лучшим разработчиком на SQL.

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




with

x (dy,mth)

select

dy, month(dy)

from

select

(current date -

dayofyear(current d

+1 months as dy

from

) tmp1

union

select

dy+1 days, mth

from

where

month(dy+1 day) = mth

select

max(day(dy))

from

Oracle

Чтобы найти последний день февраля, используйте функцию LAST DAY (последний день):

1 select to char(

2 last day(add months(trunc(sysdate,y),1)),

3 DD)

4 from t1

PostgreSQL

Чтобы возвратить все дни февраля, используйте функцию GENERA-TE SERIES. Затем с помощью агрегатной функции MAX найдите последний день февраля:

Как определить, является ли год високосным Задача

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

Решение

Те, кто уже имеет некоторый опыт работы с SQL, несомненно, встречали несколько методов решения этой задачи. Хороши практически все известные мне решения, но представленное в данном рецепте, наверное, самое простое: проверяется последний день февраля; если он является 29-м днем, то текущий год - високосный.

Для возвращения всех дней февраля используйте рекурсивный оператор WITH. С помощью агрегатной функции MAX определите последний день февраля.



1 select

max(to char(tmp2.dy+x.id,DD)) as dy

2 from

3 select

dy, to char(dy,MM) as mth

4 from

5 select

cast(cast(

date trunc(year,current date) as

+ interval 1 month as

8 from

) tmp1

) tmp2, generate series (0,29) x(id)

11 where

to char(tmp2.dy+x.id,MM) = tmp2.mth

MySQL

Чтобы найти последний день февраля, используйте функцию LAST

DAY:

1 select day(

2 last day(

3 date add(

4 date add(

5 date add(current date,

6 interval -dayofyear(current date) day),

7 interval 1 day),

8 interval 1 month))) dy

9 from t1

SQL Server

Для возвращения всех дней февраля используйте рекурсивный оператор WITH. С помощью агрегатной функции MAX определите последний день февраля:

1 with x (dy,mth)

2 as (

3 select dy, month(dy)

4 from (

5 select dateadd(mm,1,(getdate()-datepart(dy,getdate()))+1) dy

6 from t1

7 ) tmp1

8 union all

9 select dateadd(dd,1,dy), mth

10 from x

11 where month(dateadd(dd,1,dy)) = mth

12 )

13 select max(day(dy))

14 from x



1 ... 82 83 84 [ 85 ] 86 87 88 ... 219

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