Oracle SQL UNION, MINUS, INTERSECT - несложные, но эффективные приемы
В этом небольшом материале речь пойдет о сравнении и сопоставлении некоторых одноформатных данных
С такой задачей я столкнулся во время работы над одним из проектов.
Предположим , что есть некий эталонный набор данных, одна или несколько таблиц со структурой заданного формата.
С определенной периодичностью из внешних источников поступают данные в таблицах такой же структуры, но сам данные могут незначительно различаться
Итак, вот несколько несложных , приемов которые помогут вам решить подобную задачу
Функции работы с датами ORACLE SQL
Наиболее часто используемые в повседневной работе функции для преобразования, обработки данных типа DATE
SYSDATE - текущая дата, sysdate-1 - вчера , sysdate-1/24 - час назад :)
последний день месяца
SELECT LAST_DAY(sysdate) "LASTDAY" FROM DUAL;
-- 30.09.2012
первый день месяца
SELECT TRUNC(sysdate, 'MONTH') "FIRSTDAYOFMONTH" FROM DUAL;
-- 01.09.2012
первый день месяца, другая запись
Использование регулярных выражений REGEXP в ORACLE SQL
Согласно Вики
Регулярные выражения (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэкспы или регексы) это формальный язык поиска и осуществления манипуляций с подстроками в тексте , основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters).
По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.
Для работы с регулярными выражениями в Oracle SQL используются следующие операторы REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR, REG_EXPCOUNT, REG_INSTR
Рассмотрим работу каждой из этих команд и для наглядности создадим временную таблицу preserved_rows и заполним ее след.данными:
- Фамилия, ДАТА РОЖД, город проживания - данные представлены сплошным символьным буфером, с разделителем ","
CREATE GLOBAL TEMPORARY TABLE regtest ON COMMIT PRESERVE ROWS AS SELECT 'Зайцев,01111998,Киев' dt FROM dual UNION SELECT 'Иванов,01011982,Воронеж' dt FROM dual UNION SELECT 'Петров,01011988,Москва' dt FROM dual;
REGEXP_LIKE
-- REGEXP_LIKE выбирает из таблицы все строки соответвующие заданному шаблону регулярного выражения REGEXP
-- пример использования REGEXP_LIKE(выражение; 'regexp шаблон') :
Временные таблицы в Oracle
GLOBAL TEMPORARY
Что же такое временные таблицы, и зачем они нужны?
Давайте разберемся...
Временные таблицы используются в Oracle для хранения данных, которые относятся к одной сессии или одной транзакции.
Причем применение Oracle временных таблиц существенно отличается от применения временных таблиц в том же MS SQL. ORACLE временная таблица это тот же DDL обьект со всеми ограничениями , в MS SQL подобных ограничений нет.
итак подробнее