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

1 ... 71 72 73 [ 74 ] 75 76 77 ... 219


Арифметика дат

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

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

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

Добавление и вычитание дней, месяцев и лет Задача

Требуется добавить или вычесть некоторое количество дней, месяцев или лет из даты. Например, используя значение столбца HIREDATE (дата приема на работу) для служащего CLARK, необходимо получить шесть разных дат: пять дней до и после приема CLARK на работу, пять месяцев до и после приема CLARK на работу и, наконец, пять лет до




и после приема CLARK на работу. CLARK был нанят 09-JUN-1981 , таким образом, должно быть получено следующее результирующее множество:

HD MINUS 5D HD PLUS 5D HD MINUS 5M HD PLUS 5M HD MINUS 5Y HD PLUS 5Y

04-JUN-1981 14-JUN-1981 09-JAN-1981 09-NOV-1981 09-JUN-1976 09-JUN-1986 12-NOV-1981 22-NOV-1981 17-JUN-1981 17-APR-1982 17-NOV-1976 17-NOV-1986 18-JAN-1982 28-JAN-1982 23-AUG-1981 23-JUN-1982 23-JAN-1977 23-JAN-1987

Решение DB2

При работе с данными допускается использование стандартных сложения и вычитания, но любое значение, добавляемое или вычитаемое из даты, должно сопровождаться единицей времени, которую оно представляет:

1 select hiredate -5 day as hd minus 5D,

2 hiredate +5 day as hd plus 5D,

3 hiredate -5 month as hd minus 5M,

4 hiredate +5 month as hd plus 5M,

5 hiredate -5 year as hd minus 5Y,

6 hiredate +5 year as hd plus 5Y

7 from emp

8 where deptno = 10

Oracle

Для вычисления дней используйте стандартные сложение и вычитание, а для операций над месяцами и годами - функцию ADD MONTHS (добавить месяцы):

1 select hiredate-5 as hd minus 5D,

2 hiredate+5 as hd plus 5D,

3 add months(hiredate,-5) as hd minus 5M,

4 add months(hiredate,5) as hd plus 5M,

5 add months(hiredate,-5*12) as hd minus 5Y,

6 add months(hiredate,5*12) as hd plus 5Y

7 from emp

8 where deptno = 10

PostgreSQL

Используйте стандартные сложение и вычитание с ключевым словом INTERVAL (интервал) с указанием периода, который нужно добавить или вычесть, и его единицы времени. Значения INTERVAL обязательно должны быть заключены в одинарные кавычки:

1 select hiredate - interval 5 day as hd minus 5D,

2 hiredate + interval 5 day as hd plus 5D,

3 hiredate - interval 5 month as hd minus 5M,



4 hiredate + interval 5 month as hd plus 5M,

5 hiredate - interval 5 year as hd minus 5Y,

6 hiredate + interval 5 year as hd plus 5Y

7 from emp

8 where deptno=10

MySQL

Используйте стандартные сложение и вычитание с ключевым словом INTERVAL (интервал) с указанием периода, который нужно добавить или вычесть, и его единицы времени. В отличие от решения Post-greSQL значения INTERVAL не заключаются в одинарные кавычки:

1 select hiredate - interval 5 day as hd minus 5D,

2 hiredate + interval 5 day as hd plus 5D,

3 hiredate - interval 5 month as hd minus 5M,

4 hiredate + interval 5 month as hd plus 5M,

5 hiredate - interval 5 year as hd minus 5Y,

6 hiredate + interval 5 year as hd plus 5Y

7 from emp

8 where deptno=10

В качестве альтернативы можно использовать функцию DATEADD, показанную ниже:

1 select date add(hiredate,interval -5 day) as hd minus 5D,

2 date add(hiredate,interval 5 day) as hd plus 5D,

3 date add(hiredate,interval -5 month) as hd minus 5M,

4 date add(hiredate,interval 5 month) as hd plus 5M,

5 date add(hiredate,interval -5 year) as hd minus 5Y,

6 date add(hiredate,interval 5 year) as hd plus 5DY

7 from emp

8 where deptno=10

SQL Server

Для добавления или вычитания различных единиц времени к/из даты используйте функцию DATEADD:

1 select dateadd(day,-5,hiredate) as hd minus 5D,

2 dateadd(day,5,hiredate) as hd plus 5D,

3 dateadd(month,-5,hiredate) as hd minus 5M,

4 dateadd(month,5,hiredate) as hd plus 5M,

5 dateadd(year,-5,hiredate) as hd minus 5Y,

6 dateadd(year,5,hiredate) as hd plus 5Y

7 from emp

8 where deptno = 10

Обсуждение

Решение для Oracle при работе с датами использует то преимущество, что они хранятся как целое количество дней с определенной даты. Однако это верно только для операций с типом DATE (хранит только дату).



1 ... 71 72 73 [ 74 ] 75 76 77 ... 219

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