Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ ORACLE SQL \ JAVA ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

FreeBSD and Nix

Общая

WEB Разработка

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


5урок по oracle sql, дата, время, регулярные выражения


Продолжаем знакомство с возможностями запросов в ORACLE, это пятый урок.

--DBTIMEZONE - зона, установленная в базе данных
--SESSIONTIMEZONE - зона в сессии пользователя

SELECT DBTIMEZONE, SESSIONTIMEZONE FROM dual;

--CURRENT_DATE - текущая дата
--CURRENT_TIMESTAMP - текущая дата + время с зоной
--LOCALTIMESTAMP - текущая дата + время без зоны

SELECT CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM dual;

--ADD_MONTHS(d, x)
--Возвращает дату, полученную в результате прибавления одного или нескольких месяцев. 
--Количество месяцев задается параметром x, который может быть отрицательным.

SELECT ADD_MONTHS (SYSDATE, -5) d FROM dual;

--LAST_DAY(d) - Возвращает последнее число месяца
SELECT LAST_DAY (SYSDATE) d FROM dual;

--Вычислить разницу в сутках
SELECT ROUND(to_date('14.08.2014', 'DD/MM/YYYY' )-SYSDATE,0) AS diff FROM dual;

--Truncate (усечение) даты в Oracle
SELECT TRUNC(SYSDATE) FROM dual;
--усечение до минуты:
SELECT TRUNC(SYSDATE,'mi') FROM dual;
--усечение до часа:
SELECT TRUNC(SYSDATE,'hh') FROM dual;

--ADD_MONTHS добавляет\отнимает месяцы
--Вычислить дату двухмесячной давности

SELECT ADD_MONTHS(TRUNC(SYSDATE),-2) FROM dual;

--Выборка часов\минут\секунд из даты
SELECT 
  TO_NUMBER(EXTRACT (HOUR FROM a.dt)) hh, 
  TO_NUMBER(EXTRACT (MINUTE FROM a.dt)) mm, 
  TO_NUMBER(EXTRACT (SECOND FROM a.dt)) ss 
FROM (SELECT CAST(SYSDATE AS TIMESTAMP) dt FROM dual) a;


--Регулярные выражения
--Создадим тестовую таблицу и заполним данными

CREATE TABLE test_regexp (val VARCHAR(30));

INSERT INTO test_regexp VALUES ('abcde');
INSERT INTO test_regexp VALUES ('12345');
INSERT INTO test_regexp VALUES ('1avbn');
INSERT INTO test_regexp VALUES ('1avfk');
INSERT INTO test_regexp VALUES ('123-5');
INSERT INTO test_regexp VALUES ('12.45');
INSERT INTO test_regexp VALUES ('1 3 5');
INSERT INTO test_regexp VALUES ('1  45');
INSERT INTO test_regexp VALUES ('a  b  c  d');
INSERT INTO test_regexp VALUES ('a b  c   d    e');
INSERT INTO test_regexp VALUES ('111.222.3333');
INSERT INTO test_regexp VALUES ('222.333.4444');
INSERT INTO test_regexp VALUES ('333.444.5555');
INSERT INTO test_regexp VALUES ('avfk');

--REGEXP_COUNT определяет кол во вхождений REGEXP шаблона в строку
--REGEXP_COUNT(<source_string>, <pattern>[[, <start_position>], [<match_parameter>]])
--В данном примере <start_position> необязательный параметр

SELECT REGEXP_COUNT(val, 'av', 2) RES FROM test_regexp;

SELECT REGEXP_COUNT(val, 'av', 1) RES FROM test_regexp;

--REGEXP_INSTR определяет номер первого символа вхождения REGEXP шаблона в строку
--REGEXP_INSTR(<source_string>, <pattern>[[, <start_position>][, <occurrence>][, <return_option>][, <match_parameter>][, <sub_expression>]])

SELECT REGEXP_INSTR(val, '333', 1) RES FROM test_regexp;

--REGEXP_LIKE выбирает строки, соответвующие шаболну регулярного выражения
--REGEXP_LIKE(<source_string>, <pattern>, <match_parameter>)

SELECT * FROM test_regexp WHERE REGEXP_LIKE(val, '333');

--REGEXP_REPLACE заменяет шаблон регулярного выражения в строке на заданное значение
--REGEXP_REPLACE(<source_string>, <pattern>,<replace_string>, <position>, <occurrence>, <match_parameter>)

SELECT REGEXP_REPLACE(val, ' ', '') RES FROM test_regexp;

--REGEXP_INSTR определяет номер первого символа вхождения шаблона в строке
--REGEXP_INSTR(<source_string>, <pattern>[[, <start_position>][, <occurrence>][, <return_option>][, <match_parameter>][, <sub_expression>]])

SELECT REGEXP_INSTR(val, '5') RES FROM test_regexp;

--REGEXP_SUBSTR выделяет из строки заданный шаблон
--REGEXP_SUBSTR(source_string, pattern[, position [, occurrence[, match_parameter]]])

SELECT REGEXP_SUBSTR(val, '1av') RES FROM test_regexp;

 

Шаблоны регулярных выражений на википедии https://ru.wikipedia.org/wiki/%D0%E5%E3%F3%EB%FF%F0%ED%FB%E5_%E2%FB%F0%E0%E6%E5%ED%E8%FF
--Пара примеров использования регулярных выражений
--Начало строки с 1 или 2

SELECT * FROM test_regexp WHERE REGEXP_LIKE(val, '[1-2]');
--Конец строки на 5
SELECT * FROM test_regexp WHERE REGEXP_LIKE(val, '[$5]');
--С повторением символа два раза (в данном примере на символе "пробел")
SELECT * FROM test_regexp WHERE REGEXP_LIKE(val, '1 {2}');

 

Хорошая статья на английском http://psoug.org/reference/regexp
Хорошая статья на русском http://orasource.ru/materialyi-po-pl-sql/ispolzovanie-regulyarnyih-vyirazheniy-regexp-v-oracl.html

Видео можно посмотреть на моем канале YouTube


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект