111 подписчиков
Русский язык - флексивный, четкий поиск затруднен. Oracle дает решение, Oracle APEX помогает реализовать его за 15 минут. Предположим, у нас в базе данных есть коллекция статей. В статьях - слова. Мы хотим найти статьи, в которых использовано интересующее нас слово. Вариант типа select... where lower('%'||text||'%') like lower(:key) - неэффективен, поскольку вероятность угадать в ключе конкретно использованную в тексте русскую словоформу весьма низка. Поступим иначе. Сначала создадим список всех слов и идентификаторов статей, в которых они использованы...
5 лет назад
723 подписчика
В предыдущей главе мы рассмотрели общую структуру любого предложения SELECT. Работая постоянно с запросами, через довольно короткое время, мы запомним назначение и расположение каждого блока и еще чуть позже, будем правильно и максимально эффективно их использовать! Теперь, в качестве примеров, составим несколько простых SQL–запросов. Напишем запрос, выбирающий сотрудников из таблицы Persons, который отображал бы их Фамилию Имя Отчество, Дату рождения и идентификатор филиала, в котором они работают...
2 года назад
723 подписчика
SELECT (с англ. «выбрать») – это команда выборки из базы данных любой информации и преобразование ее к любому удобному виду. С помощью этой команды можно получить информацию из любой таблицы или сразу из нескольких. Получаемый результат можно группировать, анализировать, сортировать. SELECT – это самая часто используемая команда языка SQL. С помощью нее можно получать как табличные данные (например, список клиентов с подробными сведениями о них, топ самых продаваемых товаров за прошлый год, или список...
2 года назад
17 подписчиков
Поиск по дате на Oracle

Задача

Имеется таблица изменений курса валют T_CURRENCY:

CODE  varchar2(32)  Код валюты (USD, RUR, …)
DATE_C date Дата изменения курса
VALUE  number Значение курса

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

Решение

Создаю структуру

CREATE TABLE T_CURRENCY (
  CODE VARCHAR2(32),
  DATE_C DATE,
  VALUE NUMBER
);
/

Наполняю структуру данными

INSERT INTO "T_CURRENCY" (CODE, DATE_C, VALUE) VALUES ('USD', TO_DATE('2019-08-13 16:00:00','YYYY-MM-DD HH24:MI:SS') , 64.760);
INSERT INTO "T_CURRENCY" (CODE, DATE_C, VALUE) VALUES ('USD', TO_DATE('2019-08-13 20:00:00','YYYY-MM-DD HH24:MI:SS') , 64.834);
INSERT INTO "T_CURRENCY" (CODE, DATE_C, VALUE) VALUES ('USD', TO_DATE('2019-08-14 08:00:00','YYYY-MM-DD HH24:MI:SS') , 65.209);
INSERT INTO "T_CURRENCY" (CODE, DATE_C, VALUE) VALUES ('USD', TO_DATE('2019-08-14 12:00:00','YYYY-MM-DD HH24:MI:SS') , 65.460);
COMMIT;

Проверяю выборку

SELECT CODE,
   TO_CHAR(DATE_C, 'YYYY-MM-DD HH24:MI:SS') AS DATE_TIME,
   VALUE
 FROM T_CURRENCY;

Вижу

CODE DATE_TIME   VALUE
USD 2019-08-13 16:00:00 64.76
USD 2019-08-13 20:00:00 64.834
USD 2019-08-14 08:00:00 65.209
USD 2019-08-14 12:00:00 65.46

Для того, чтобы найти курс на указанную дату и время (например, на 2019-08-14 09:45), воспользуемся следующим запросом с подзапросом:

SELECT CODE,
   TO_CHAR(DATE_C, 'YYYY-MM-DD HH24:MI:SS') AS DATE_TIME,
   VALUE FROM T_CURRENCY
 WHERE CODE = 'USD'
  AND DATE_C IN (
   SELECT MAX(DATE_C)
   FROM T_CURRENCY
   WHERE DATE_C <= TO_DATE('2019-08-14 09:45:00','YYYY-MM-DD HH24:MI:SS')
  );

Результат:

CODE DATE_TIME   VALUE
USD 2019-08-14 08:00:00 65.209
9 месяцев назад