Иногда возникает потребность трактовать значение одного типа как значение другого типа. Например, использовать числовое значение как символьную строку или наоборот. В этом случае применяют функцию
CAST (<значение> AS <тип данных>)
Функция CAST делает копию значения, преобразуя его к указанному типу данных. При этом не следует забывать о множестве типов данных, в которое может быть преобразовано данное значение:
Пример. Найти покупателя, который делал закупки то ли на 209, то ли на 309 единиц товара. На сколько именно, никто не помнит; вспомнили лишь, что последними разрядами в количестве отпускаемого товара были цифры '09'. Тогда приводим значения столбца KOLVO к типу CHARACTER и к результату применяем LIKE
Пример. Выдать все покупки товара за 20 число (предположим, каждого месяца). В InterBase нет встроенных функций для разделения даты на число, месяц и год. Варианты решения:
• в приложении, разработанном на Delphi, анализировать даты при помощи процедуры DecodeDate;
• написать UDF (User Defined Function, определенную пользователем функцию), которая реализует выделение номера дня из даты, и использовать имя этой функции в операторе SELECT;
|
|
• привести значение даты к типу CHAR (или, что лучше, трактовать значение даты как строковое значение) и применить к полученному значению LIKE, CONTAINING или STARTING WITH, в зависимости от потребности.
Воспользуемся последним способом:
SELECT DAT_RASH, TOVAR, POKUP, KOLVO FROM RASHOD.
WHERE CAST(DAT_RASH AS CHAR(6)) STARTING WITH "20"
ЗАМЕЧАНИЕ. Значение типа DATE не нужно приводить к строковому типу, поскольку два этих типа являются совместимыми и значение DATE в InterBase может трактоваться как строковое, следовательно в данном примере можно устранить ненужное приведение типов:
SELECT DAT_RASH, TOVAR, POKUP, KOLVO
FROM RASHOD WHERE DAT_RASH STARTING WITH "20"
(Предполагается, что формат задания даты – день.месяц.год)