|
Программирование >> Преобразование значений null
Работа с датами В данной главе представлены рецепты для поиска и обработки дат. Запросы с участием дат очень распространены. При работе с датами необходимо соответствующим образом мыслить и хорошо понимать функции, предоставляемые СУБД для обращения с такими данными. Рецепты этой главы формируют необходимый фундамент для перехода к более сложным запросам, в которых задействованы не только даты, но и время. Прежде чем перейти к рецептам, я хочу еще раз повторить основную мысль (о которой говорилось в предисловии): эти рецепты должны использоваться как руководства к решению конкретных задач. Старайтесь думать глобально . Например, если рецепт решает задачу для текущего месяца, помните, что его можно использовать (с небольшими изменениями) для любого месяца. Повторюсь, я хочу чтобы представленные рецепты использовались как руководства, а не как абсолютный окончательный вариант. Книга не может охватить ответы на все вопросы, но если понять те решения, которые в ней представлены, то останется просто изменить их соответственно своим задачам. Советую также рассматривать все предлагаемые альтернативные версии решений. Например, если задача решается с использованием определенной предоставляемой СУБД функции, стоит потратить время и силы, чтобы узнать о возможном альтернативном решении, которое может быть более или менее эффективным по сравнению с приведенным здесь. Знание всех возможных вариантов сделает вас лучшим разработчиком на SQL. В представленных в данной главе рецептах используются простые типы дат. В случае использования более сложных типов дат решения должны быть скорректированы соответствующим образом.
Чтобы найти последний день февраля, используйте функцию 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 определите последний день февраля.
Чтобы найти последний день февраля, используйте функцию 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |