Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐SQL\T-SQL
⇐FreeBSD and Nix
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA
⇐Мото

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


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

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

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


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru