Использование преобразований
Использование преобразований
Обмен данными дата/время с другими приложениями
Импорт данных дата/время, созданных в другом месте, - например, в другой системе базы данных, во включающем языке или в устройстве получения даты - обычно требует некоторых предварительных действий, прежде чем данные дата/время могут быть помещены в базу данных Firebird.
Большинство включающих языков программирования не поддерживают типы данных DATE, TIME и TIMESTAMP, представляя их внутренне в виде строк или структур. Устройства ввода данных обычно сохраняют дату и время в строках различных форматов и стилях. Типы дата/время чаще всего являются несовместимыми в различных базах данных.
Преобразование обычно требует вычисления и декодирования содержимого элементов даты в исходных данных. Второй частью процесса является реконструкция декодированных элементов и передача их SQL Firebird каким-нибудь способом. Во включающем языке, в котором не существует никакого способа передачи типов данных дата/время Firebird, использование функции CAST() в комбинации с допустимыми текстовыми строками для обработки в Firebird в качестве литералов даты может оказаться очень полезным[27].
В некоторых случаях сохранение внешних данных в текстовых файлах в форматах литералов даты может быть лучшим решением. Firebird может открывать такие файлы, как входные таблицы в модулях на серверной стороне - хранимые процедуры или триггеры - и использовать CAST() и другие функции для обработки данных в столбцах даты/времени в родных таблицах. Более подробную информацию см. в разд. "Использование внешних файлов в качестве таблицы " главы 16.
Функция CAST() также может быть использована для подготовки внутренних данных для экспорта.
Использование в выражениях условия поиска
Такие ситуации появляются, когда использование CAST() в предложении WHERE с типами дата/время решает логические проблемы сравнения столбца одного типа со столбцом другого типа данных.
Предположим, что нам нужно объединить таблицу покупателей, которая содержит столбец BALANCE_DATE типа DATE с таблицей транзакций покупателя, которая имеет столбец TRANSUDATE типа TIMESTAMP. Нам нужно создать предложение WHERE, которое выбирает набор данных, содержащий неоплаченные транзакции для текущего покупателя, появившиеся не позднее BALANCE_DATE. Мы можем попытаться:
SELECT ...
WHERE COST_TRANS.TRANSDATE <= CUSTOMER.BALANCE_DATE ;
Этот критерий не даст нам того, что мы хотим! Он найдет все строки транзакций после полуночи даты BALANCE_DATE, потому что он вычислит BALANCE_DATE с временем 00:00:00. Любая транзакция после полуночи этой даты не будет соответствовать критерию поиска.
Что мы действительно хотим, так это включить все транзакции, где дата из TRANS DATE соответствует BALANCE_DATE. Преобразование TRANSUDATE в тип DATE сохраняет день:
SELECT ...
WHERE CAST (CUST_TRANS.TRANSDATE AS DATE) <= CUSTOMER.BALANCE_DATE;
Использование в преобразовании диалекта
Диалект 3 предоставляет более богатую поддержку типов дата/время, чем диалект 1. Одной из задач, которая, скорее всего, привлечет ваше внимание, если вы выполняете такое преобразование, является замена существующих в диалекте 1 столбцов типа DATE (который эквивалентен типу TIMESTAMP в диалекте 3) путем преобразования их в типы данных диалекта 3 DATE (только дата) или TIME (только время), CAST() легко выполняет эту работу.
Пример одного из стилей преобразования с использованием CAST() см. в конце этой главы.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
94. Избегайте преобразований, отменяющих const
94. Избегайте преобразований, отменяющих const РезюмеПреобразование типов, отменяющее const, может привести к неопределенному поведению, а кроме того, это свидетельство плохого стиля программирования даже в том случае, когда применение такого преобразования вполне
97. Не используйте объединения для преобразований
97. Не используйте объединения для преобразований РезюмеХитрость все равно остается ложью: объединения можно использовать для получения "преобразования типа без преобразования", записывая информацию в один член и считывая из другого. Однако это еще более опасно и менее
15.10.4. Ранжирование последовательностей определенных пользователем преобразований
15.10.4. Ранжирование последовательностей определенных пользователем преобразований Фактический аргумент функции может быть неявно приведен к типу формального параметра с помощью последовательности определенных пользователем преобразований. Как это влияет на
19.3.2. Устоявшие функции и последовательности пользовательских преобразований
19.3.2. Устоявшие функции и последовательности пользовательских преобразований Наследование оказывает влияние и на второй шаг разрешения перегрузки функции: отбор устоявших из множества кандидатов. Устоявшей называется функция, для которой существуют приведения типа
Включение преобразований
Включение преобразований Подобно тому, как мы бы использовали в языке С директиву #include для включения внешних файлов, преобразования в XSLT могут использовать для той же самой цели элемент xsl:include. Правда, в отличие от языка С, условное включение в XSLT
Импорт преобразований
Импорт преобразований Другим способом использования внешних модулей в XSLT является импорт преобразований, который обеспечивается элементом xsl:import. Импорт преобразований более сложен, чем их простое включение — последовательность импорта модулей может влиять на то, как
Выполнение XSLT-преобразований в C/C++
Выполнение XSLT-преобразований в C/C++ В качестве примера использования XSLT в языках С и С++ мы приведем очень простую программу, которая выполняет над документом source.xml преобразование stylesheet.xsl и выводит результат в файл document.out. На этот раз в качестве процессора мы будем
Выполнение XSLT-преобразований в PHP
Выполнение XSLT-преобразований в PHP Начиная с четвертых версий, PHP поставляется вместе с XSLT-процессором Sablotron, который включен в РНР в качестве расширения.Для того чтобы использовать Sablotron в PHP-скриптах, следует выполнить следующие действия:1. Убедиться, что файл php_sablot.dll
Выполнение XSLT-преобразований в Java
Выполнение XSLT-преобразований в Java Язык Java традиционно широко поддерживает XML-технологии: большинство передовых разработок в этой области реализуется, как правило, сначала на Java и уж затем переносится на другие платформы разработки.Не стал исключением и XSLT. Можно смело
Глава 15 Использование эффектов и преобразований
Глава 15 Использование эффектов и преобразований В главе 9 мы изучили фильтры и наложения, которые можно использовать для создания различного рода специальных эффектов (тени, размытия и пр.). Все они призваны помочь на первых порах начинающим пользователям. Опытные
3.6. ПОДХОДЫ НА ОСНОВЕ ФОРМАЛЬНЫХ ПРЕОБРАЗОВАНИЙ
3.6. ПОДХОДЫ НА ОСНОВЕ ФОРМАЛЬНЫХ ПРЕОБРАЗОВАНИЙ Эта группа подходов содержит максимально формальные требования к виду работ создания программного обеспечения.Технология стерильного цеха. Основные идеи технологии стерильного цеха (cleanroom process model) были предложены