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

1 ... 88 89 90 [ 91 ] 92 93 94 ... 219


select

adddate(x.dy,interval t500.id-1 day)

from

select

dy, year(dy) yr

from

select

adddate(

adddate(current date,

interval -dayofyear(current date) i

interval 1 day ) dy

from

) tmp1

) x,

t500

where

year(adddate(x.dy,interval t500.id-1

day))

) tmp2

where

dayname(dy) = Friday

SQL Server

Рекурсивным оператором WITH возвращаем все дни текущего года. Затем с помощью функции DAYNAME выбираем только пятницы:

with

x (dy,yr)

select

dy, year(dy) yr

from

select

getdate()-datepart(dy,getdate())+1 dy

from

) tmp1

union

select

dateadd(dd,1,dy), yr

from

where

year(dateadd(dd,1,dy)) = yr

select

x.dy

from

where

datename(dw,x.dy) = Friday

option

(maxrecursion 400)

Обсуждение DB2

Чтобы выбрать все пятницы текущего года, необходимо суметь возвратить все дни текущего года. Первый шаг - найти первый день года с помощью функции DAYOFYEAR. Вычитая значение, возвращенное

DAYOFYEAR(CURRENT DATE) из текущей даты, получаем 31 декабря предыдущего года. Затем добавляем 1, чтобы получить первый день текущего года:

select (current date -

dayofyear(current date) days +1 days) as dy

from t1



01-JAN-2005

Имея первый день года, с помощью оператора WITH реализуем многократное добавление одного дня, начиная с первого дня года, до тех пор пока не дойдем до следующего года. Результирующее множество будет включать все дни текущего года (строки, возвращенные рекурсивным представлением Х, частично показаны ниже):

with x (dy,yr) as (

select dy, year(dy) yr

from ( select (current date -

dayofyear(current date) days +1 days) as dy

from t1 ) tmp1 union all

select dy+1 days, yr from x

where year(dy +1 day) = yr

select dy from x

01-JAN-2005

15-FEB-2005 22-NOV-2005

31-DEC-2005

Завершающий шаг - с помощью функции DAYNAME выбрать строки, соответствующие пятницам.

Oracle

Чтобы выбрать все пятницы текущего года, необходимо возвратить все дни текущего года. Сначала используем функцию TRUNC для получения первого дня года:

select trunc(sysdate,y) dy from t1

01-JAN-2005

Далее с помощью оператора CONNECT BY возвращаем все дни текущего года (чтобы понять, как генерировать строки с помощью CONNECT




31-DEC-2005

Завершающий шаг - с использованием функции TO CHAR выбрать только пятницы.

PostgreSQL

Чтобы выбрать все пятницы текущего года, необходимо сначала получить все дни текущего года (каждый день в отдельной строке). Для этого используем функцию GENERATE SERIES. Она должна возвратить диапазон значений от 0 до значения, равного количеству дней в текущем году минус 1. Первый передаваемый в GENERATE SERIES параметр - 0, тогда как второй параметр - это запрос, определяющий количество дней в текущем году (поскольку полученное значение добавляется к первому дню года, необходимо добавить на 1 день меньше, чем есть в текущем году, чтобы не попасть в первый день следующего года). Результат, возвращаемый вторым параметром функции GENE-RATE SERIES, показан ниже:

select cast( cast(

BY, смотрите раздел Формирование последовательности числовых значений главы 10).

В данном рецепте используется оператор WITH, но можно также применять вложенный запрос.

На момент написания данной книги Oracle-оператор WITH не приспособлен для рекурсивных операций (в отличие от DB2 и SQL Server). Рекурсивные операции реализуются с помощью CONNECT BY. Результирующее множество, возвращаемое вложенным представлением Х, частично показано ниже:

with x

as (

select trunc(sysdate,y)+level-1 dy from t1

connect by level <=

add months(trunc(sysdate,y),12)-trunc(sysdate,y)

select * from x

01-JAN-2005 15-FEB-2005 22-NOV-2005



1 ... 88 89 90 [ 91 ] 92 93 94 ... 219

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