Функции манипулирования данными
- Что такое функция
- Использование функций
- Функции манипулирования текстом
- Функции манипулирования датой и временем
- Функции для манипулирования числами
Функции манипулирования датой и временем
Дата и время хранятся в таблицах с использованием соответствующих типов данных, каждая СУБД использует свои собственные типы. Значения даты и времени хранятся в специальном формате, поэтому их можно быстро и эффективно сохранить или отфильтровать, а также сохранить физическое пространство на диске.
Формат, в котором хранятся дата и время, обычно нельзя использовать в приложениях, поэтому почти всегда используются функции даты и времени для чтения, расширения и манипулирования этими значениями. Функции манипулирования датой и временем являются одними из наиболее важных функций в SQL. К сожалению, они меньше всего поддаются переносу на другие платформы и реализации SQL.
Чтобы продемонстрировать процедуру использования функции манипулирования датой и временем, приведем простой пример. В таблице Orders все заказы хранятся с датой заказа. Чтобы извлечь список всех заказов, сделанных в 2004 году, в SQL Server и Sybase необходимо выполнить следующее:
FROM Orders
WHERE DATEPART(yy, order_date) = 2004;
order_num
-------------------
20005
20006
20007
20008
20009
В Access используйте следующую версию примера:
FROM Orders
WHERE DATEPART('yyyy', order_date) = 2004;
В этом примере (в версиях для SQL Server и Sybase и в Access) используется функция DATEPART (), которая, как видно из названия, возвращает только часть даты. В функции DATEPART () используются два параметра: часть, подлежащая возвращению, и дата, из которой эта часть возвращается. В рассматриваемом примере функция DATEPART () из столбца order_coluran возвращает только год. Путем сравнения полученного значения со значением 2004 предложение WHERE выбирает только те заказы, которые были сделаны в этом году.
Ниже приведена версия данного примера для PostgreSQL, в которой используется похожая функция DATE_PART ():
FROM Orders
WHERE DATE_PART('year', order_date) = 2004;
В MySQL, помимо DATEPART(), есть множество других функций, предназначенных для манипулирования значениями дат. Пользователи MySQL могут использовать функцию YEAR () для выборки из даты значения года:
FROM Orders
WHERE YEAR(order_date) = 2004;
В Oracle также нет функции DATEPART (), но существуют несколько других функций манипулирования датой, которые можно использовать с этой же целью. Рассмотрим пример:
FROM Orders
WHERE to_number (to__char (order_date, 'YY')) = 2004;
В этом примере функция to_char() используется для извлечения части даты, а функция to_number () — для преобразования этой части в числовое значение, чтобы его можно было сравнить со значением 2004.
Тех же результатов можно добиться при помощи оператора BETWEEN:
FROM Orders
WHERE order_date BETWEEN to_date('Ol-JAN-2004'
AND to date('31-DEC-2004');
В этом примере функция Oracle to_date () используется для преобразования двух строк в даты. В одной содержится дата 1 января 2004, а в другой — 31 декабря 2004. Стандартный оператор BETWEEN используется для поиска всех заказов, сделанных в период между этими двумя датами. Этот код не будет работать в SQL Server, так как в этой СУБД не поддерживается функция to_date (). Однако если заменить функцию to_date() функцией DATAPART(), этот оператор можно будет использовать.
Даты в Oracle
В приведенных примерах выбиралась и использовалась только часть даты (год). Чтобы выбрать заказы по месяцу, необходимо сделать то же самое, указав ключевое слово AND для сравнения месяца и года.
СУБД обычно могут выполнять гораздо больше действий, чем просто выборка части даты. В большинстве из них присутствуют функции для сравнения дат, выполнения простых арифметических операций с датами, опции форматирования дат и многое другое. Но, как вы уже заметили, функции манипулирования датой и временем различны для разных СУБД. Обратитесь к документации по своей СУБД и уточните, какие функции манипулирования датой и временем в ней поддерживаются.



