|
Программирование >> Построение запросов sql
Рис. 3.31. Результат работы функции DATEADD Для определения величины временного промежутка от первого заданного значения типа дата, время или дата/время до второго может использоваться функция DATEDIFF. Данная функция возвращает значение типа BIGINT и имеет следующий формат: DATEDIFF ( <временной отрезок> FROM <значение1> FOR <значение2> ) DATEDIFF ( <временной отрезок>, <значение1>, <значение2> ), где <временной отрезок> имеет тот же синтаксис, что и в функции DATEADD. Следует отметить следующее: - функция возвращает положительное число, если <значение2> превышает <значение1>, отрицательное - если <значение1> превышает <значение2>, и ноль - если значения равны; - если результат вычисления дробный, то выводится округленное значение; - сравнение значения типа DATE со значением типа TIME недопустимо; - как и для функции DATEADD, определенные временные отрезки могут использоваться только с соответствующим им типом. Например, требуется для заявок, поданных абонентом с лицевым счетом 115705, вывести количество недель, прошедших с даты регистрации заявки до момента ее выполнения. Для этого можно использовать следующий запрос: SELECT RequestCD, DATEDIFF (WEEKDAY FROM IncomingDate FOR ExecutionDate) AS Interval FROM Request WHERE AccountCD = 115705;. Результат выполнения запроса представлен на рис. 3.32.
Таблица 3.3. Преобразования между типами дата/время
Можно также преобразовывать правильно сформированную строку в тип дата-время . Например, значение с типом даты из трех значений дня, месяца и года можно получить следующим образом: CAST(DAY MONTH YEAR AS DATE), где DAY, MONTH и YEAR могут представлять собой константы либо столбцы таблицы, в которых содержится значение дня, месяца или года соответственно. Например, если требуется вывести различные значения месяца и года начислений за услугу газоснабжения с кодом 2, отнесенные на первое число соответствующего месяца, то запрос может выглядеть следующим образом: SELECT DISTINCT NachislMonth, NachislYear, CAST(1. NachislMonth . NachislYear as date) as FirstDay В тех случаях, когда Firebird не может выполнить неявное преобразование типов, требуется выполнять явное преобразование с помощью функции CAST. Эта функция производит преобразование значения выражения, заданного первым аргументом, в тип, заданный вторым аргументом. Синтаксис функции: CAST (<выражение> AS <тип данных>). В качестве типа данных нельзя указывать домены. В большинстве случаев использование функции CAST не требуется, так как Firebird производит неявное преобразование типов данных. Например, сравнение столбца типа DATE с датой 12/31/2003 приведет к неявному преобразованию строкового литерала 12/31/2003 в тип данных DATE и следующий запрос является корректным: SELECT * FROM Request WHERE IncomingDate > 01.10.2001;. Можно использовать функцию CAST для сравнения столбцов с различными типами данных из одной и той же таблицы или из различных таблиц. С помощью CAST можно выполнять преобразование из одного типа дата/время в другой. В табл. 3.3 представлены правила преобразования [18]. FROM NachislSumma WHERE GazServiceCD = 2;. Результат выполнения запроса представлен на рис. 3.33.
Рис. 3.33. Результат работы функции CAST Кроме того, можно преобразовывать числовые типы в строку и наоборот. Например, чтобы при выводе увеличить номер лицевого счета всех абонентов на 2, нужно использовать следующий запрос: SELECT (CAST (AccountCD AS INTEGER)+2) AS New Acс, Fio FROM Abonent;. Если, например, нужно вывести значения начислений абоненту с номером лицевого счета 115705, округленными до целого значения, то для этого можно использовать следующий запрос: SELECT NachislFactCD, NachislSum, CAST(NachislSum AS INTEGER) AS RoundSum FROM NachislSumma WHERE AccountCD=115705;. Результат выполнения запроса представлен на рис. 3.34.
Рис. 3.34. Результат округления числа до целого значения с помощью функции CAST
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |