|
Программирование >> Преобразование значений null
SQL Server Рекурсивным оператором WITH возвращаем все дни текущего года. Затем с помощью функции DAYNAME выбираем только пятницы:
Обсуждение 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |