|
Программирование >> Преобразование значений null
Для формирования необходимого числа строк (дней) между двумя датами используйте сводную таблицу T500. Затем подсчитайте количество дней, не являющихся выходными. Добавление дней к каждой дате реализуйте с помощью функции DATE ADD. Воспользуйтесь функцией DATE FORMAT (формат даты) для получения названия дня недели для каждой даты: 10 11 12 13 14 15 16 17 18 select from select sum(case when date format( date add(]ones hd, interval t500.id-1 DAY),%a) in ( Sat,Sun ) then 0 else 1 end) as days max(case when ename = BLAKE then hiredate end) as blake hd, max(case when ename = JONES then hiredate as ]ones hd from where ( BLAKE,JONES ) where end) ename in ) x, t500 t500.id <= datediff(blake hd,]ones hd)+1 Oracle Для формирования необходимого числа строк (дней) между двумя датами используйте сводную таблицу T500, и затем подсчитайте количество дней, не являющихся выходными. Используйте функцию TO CHAR для получения названия дня недели для каждой даты: 1 select sum(case when to char(]ones hd+t500.id-1,DY) 2 in ( SAT,SUN ) 3 then 0 else 1
PostgreSQL Для формирования необходимого числа строк (дней) между двумя датами используйте сводную таблицу T500. Затем подсчитайте количество дней, не являющихся выходными. Используйте функцию TO CHAR для получения названия дня недели для каждой даты:
SQL Server Для формирования необходимого числа строк (дней) между двумя датами используйте сводную таблицу T500, и затем подсчитайте количество дней, не являющихся выходными. Используйте функцию DATENAME (имя даты) для получения названия дня недели для каждой даты: 1 select sum(case when datename(dw,jones hd+t500.id-1) 2 in ( SATURDAY,SUNDAY ) 3 then 0 else 1 4 end) as days 5 from ( 6 select max(case when ename = BLAKE 7 then hiredate 8 end) as blake hd,
Обсуждение Хотя в различных СУБД используются разные встроенные функции для определения названия дня недели, общий подход к решению одинаков для всех СУБД. Решение можно разбить на два этапа: 1. Возвращаем дни между начальной и конечной датами (включая их). 2. Подсчитываем количество дней (т. е. строк), исключая выходные. Вложенный запрос Х реализует первый этап. В нем можно заметить агрегатную функцию MAX, которая используется в рецепте для удаления значений NULL. Разобраться в работе функции MAX поможет следующий запрос. Он показывает результаты, возвращаемые вложенным запросом Х без функции MAX: select case when ename = BLAKE then hiredate end as blake hd, case when ename = JONES then hiredate end as jones hd from emp where ename in ( BLAKE,JONES ) BLAKE HD JONES HD 02-APR-1981 01-MAY-1981 Без MAX возвращаются две строки. При использовании функции MAX будет возвращена только одна строка, а не две, причем без значений NULL: select max(case when ename = BLAKE then hiredate end) as blake hd, max(case when ename = JONES then hiredate end) as jones hd from emp where ename in ( BLAKE,JONES ) BLAKE HD JONES HD 01-MAY-1981 02-APR-1981
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |