Программирование >>  Построение запросов sql 

1 ... 25 26 27 [ 28 ] 29 30 31 ... 101


INCOMINGDATE

EXEC LIMIT

17.12.2001

31.12.2001

07.08.2001

21.08.2001

31.12.2001

14.01.2002

06.11.2001

20.11.2001

Рис. 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.

REQUESTCD

INTERVAL

<null>



Таблица 3.3. Преобразования между типами дата/время

Исходный тип

В тип TIMESTAMP

В тип DATE

В тип TIME

TIMESTAMP

Недоступно

Да, преобразует дату, игнорируя время

Да, преобразует время, игнорируя дату

DATE

Да, время устанавливается в значение полуночи

Недоступно

TIME

Да, дате присваивается значение

CURRENT DATE

Недоступно

DATE+TIME

Можно также преобразовывать правильно сформированную строку в тип дата-время . Например, значение с типом даты из трех значений дня, месяца и года можно получить следующим образом:

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.

NACHISLMONTH

NACHISLYEAR

FIRSTDAY

1999

01.01.1999

2000

01.01.2000

1999

01.04.1999

2001

01.05.2001

2001

01.06.2001

2001

01.08.2001

2000

01.09.2000

2001

01.09.2001

1998

01.10.1998

2001

01.10.2001

2001

01.11.2001

2000

01.12.2000

2001

01.12.2001

Рис. 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.

NACHISLFACTCD

NACHISLSUM

ROUNDSUM

40,00

250,00

250,00

58,70

37,15

37,80

37,15

37,15

Рис. 3.34. Результат округления числа до целого значения с помощью

функции CAST



1 ... 25 26 27 [ 28 ] 29 30 31 ... 101

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