Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab_04_Oracle %28PL_SQL%29 / Додатково_Теорія_03_Вбудовані_функції

.pdf
Скачиваний:
5
Добавлен:
11.02.2015
Размер:
643.85 Кб
Скачать

1. Виконаємо функцію REPLACE, щоб видалити всі входження символу «а». Довжина отриманого рядка є довжина вихідного рядка після

видалення з неї всіх символів «а».

SQL>

-------------------

SQL> --

Вправа №17

SQL> -------------------

 

SQL> SELECT отдел_имя, LENGTH(отдел_имя),

2

 

LENGTH(REPLACE(отдел_имя, 'а'))

3

FROM отдел;

ОТДЕЛ_ИМЯ LENGTH(ОТДЕЛ_ИМЯ) LENGTH(REPLACE(ОТДЕЛ_ИМЯ,'А'))

--------------------- --------------------------------- --------------------------------------------------

учет

4

4

исследования

12

11

реализация

10

8

операции

8

7

2. Віднімемо цю довжину від довжини вихідного рядка.

SQL> ------------------

 

 

SQL> --

Вправа №18

 

SQL> ------------------

 

 

SQL> SELECT отдел_имя, LENGTH(отдел_имя),

2LENGTH(отдел_имя) - LENGTH(REPLACE(отдел_имя, 'а'))

3"Буква 'а'"

4FROM отдел;

ОТДЕЛ_ИМЯ LENGTH(ОТДЕЛ_ИМЯ) Буква 'а'

--------------------- ----------------------------------- ---------

учет

4

0

исследования

12

1

реализация

10

2

операции

8

1

3. Одержимо кількість входжень символу «а» у вихідний рядок.

7.3.2.3. Числові функції

Числові функції одержують на вході числа й повертають також числові значення. У цьому розділі представлено кілька найбільш вживаних числових функцій.

Функція ROUND

ROUND({ стовпецьзначення }, n );

Округляє числове значення до n-го знака після коми. Якщо nне задано або дорівнює 0, то округлення відбувається до цілого числа. Якщо

n негативне, то – до відповідного розряду.

SQL> ------------------

SQL> -- Вправа №19

SQL> ------------------

SQL> SELECT ROUND(45.923, 1), ROUND(45.923), 2 ROUND(45.323, 1), ROUND(42.323, -1),

3 ROUND(оклад/33, 2)

4 FROM служ

5 WHERE отдел_номер = 10;

ROUND(45.923,1) ROUND(45.923) ROUND(45.323,1) ROUND(42.323,-1) ROUND(ОКЛАД/33,2)

------------------------- ----------------------- ---------------------- --------------------------- ------------------------------

45,9

46

45,3

40

74,24

45,9

46

45,3

40

151,52

45,9

46

45,3

40

24,24

Функція TRUNC

TRUNC({ стовпецьзначення }, n );

Відкидає молодші розряди числа до n-го знака. Якщо n не задано або дорівнює 0, то відкидається вся дробова частина числа. Якщо n негативне, то n молодших розрядів числа обнуляються.

SQL> ------------------

SQL> -- Вправа №20

SQL> ------------------

SQL> SELECT TRUNC(45.923, 1), TRUNC(45.923), 2 TRUNC(45.323, 1), TRUNC(42.323, -1),

3 TRUNC(оклад/33, 2)

4 FROM служ

5 WHERE отдел_номер = 10;

TRUNC(45.923,1) TRUNC(45.923) TRUNC(45.323,1) TRUNC(42.323,-1) TRUNC(ОКЛАД/33,2)

------------------------- --------------------- ----------------------- --------------------------- ---------------------------

45,9

45

45,3

40

74,24

45,9

45

45,3

40

151,51

45,9

45

45,3

40

24,24

Функція CEIL

CEIL({

стовпець значення });

Знаходить мінімальне ціле, більше або рівне даному числу.

SQL> ------------------

 

SQL> --

Вправа №21

SQL> ------------------

 

SQL> SELECT CEIL(оклад), CEIL(99.9), CEIL(101.76), CEIL(-11.1)

2

FROM служ

3

WHERE оклад BETWEEN 3000 AND 5000;

CEIL(ОКЛАД) CEIL(99.9) CEIL(101.76) CEIL(-11.1)

------------------- --------------- ------------------ ---------------

3000

100

102

-11

5000

100

102

-11

3000

100

102

-11

Функція FLOOR

FLOOR({ стовпецьзначення });

Знаходить максимальне ціле, менше або рівне даному числу.

SQL> ------------------

SQL> -- Вправа №22

SQL> ------------------

SQL> SELECT FLOOR(оклад), FLOOR(99.9), FLOOR(101.76), FLOOR(-11.1)

2 FROM служ

3 WHERE оклад BETWEEN 3000 AND 5000;

FLOOR(ОКЛАД) FLOOR(99.9) FLOOR(101.76) FLOOR(-11.1)

----------------------- ------------------ ---------------------- -------------------

3000

99

101

-12

5000

99

101

-12

3000

99

101

-12

Функція POWER

 

POWER({ стовпець значення },

n );

Зводить число в ступінь n , де

n може бути не ціле або навіть

негативне. Однак, якщо значення, що зводиться в ступінь, негативне, то n повинне бути цілим.

SQL> ------------------

SQL> -- Вправа №23

SQL> ------------------

SQL> SELECT оклад, POWER(оклад, 2), POWER(оклад, 3),

POWER(50, 5)

 

 

 

2

FROM служ

 

 

 

3

WHERE отдел_номер = 10;

 

 

ОКЛАД POWER(ОКЛАД,2) POWER(ОКЛАД,3) POWER(50,5)

 

------------ ------------------------ -------------------------- -------------------

 

2450

6002500

1,471E+10

312500000

 

5000

25000000

1,250E+11

312500000

 

800

640000

512000000

312500000

Функція EXP

EXP( n );

Обчислює значення числа «е» у ступені n , де е = 2,71828183...

SQL> ------------------

SQL> -- Вправа №24

SQL> ------------------

SQL> SELECT EXP(3) 2 FROM отдел;

EXP(3)

------------

20,085537

20,085537

20,085537

20,085537

Функція SQRT

SQRT({

стовпець значення });

Обчислює квадратний корінь від числа. Якщо число не визначене або

негативне, то результат буде NULL.

SQL> ------------------

 

SQL> --

Вправа №25

SQL> ------------------

 

SQL> SELECT оклад, SQRT(оклад), SQRT(40), SQRT(премия)

2

FROM служ

3

WHERE премия > 0;

ОКЛАД SQRT(ОКЛАД) SQRT(40) SQRT(ПРЕМИЯ)

-------------- ---------------------- -------------- ----------------------

1600

40

6,3245553

17,320508

1250

35,355339

6,3245553

22,36068

1250

35,355339

6,3245553

37,416574

Функція SIGN

SIGN({ стовпецьзначення });

Повертає -1, якщо число негативне; 0, якщо число дорівнює нулю й 1, якщо число позитивне.

SQL> ------------------

SQL> -- Вправа №26

SQL> ------------------

SQL> SELECT оклад - премия, SIGN(оклад - премия),

2премия - оклад, SIGN(премия - оклад)

3FROM служ

4WHERE отдел_номер = 30 AND премия IS NOT NULL;

ОКЛАД-ПРЕМИЯ SIGN(ОКЛАД-ПРЕМИЯ) ПРЕМИЯ-ОКЛАД SIGN(ПРЕМИЯ-ОКЛАД)

------------------------ -------------------------------- -------------------------- ---------------------------------

1300

1

-1300

-1

750

1

-750

-1

-150

-1

150

1

1500

1

-1500

-1

Часто функція SIGN використовується для визначення, яке з двох чисел більше. У наступному прикладі обрані всі службовці, в яких зар-плата більша за премію.

SQL> ------------------

SQL> -- Вправа №27

SQL> ------------------

SQL> SELECT служ_имя, оклад, премия

2

FROM служ

 

3

WHERE SIGN(оклад - премия) = 1;

СЛУЖ_ИМЯ

ОКЛАД

ПРЕМИЯ

------------------

 

---------

--------------

Иванова

1600

300

Черничная

1250

500

Воронина

1500

0

Функція ABS

ABS({ стовпецьзначення });

Повертає значення числа за модулем.

 

 

SQL> ------------------

 

 

 

SQL> -- Вправа №28

 

 

 

SQL> ------------------

 

 

 

SQL> SELECT оклад, премия, премия - оклад,

 

 

2

ABS(премия - оклад), ABS(-35)

 

 

3

FROM служ

 

 

 

4

WHERE отдел_номер = 30;

 

 

ОКЛАД

ПРЕМИЯ ПРЕМИЯ-ОКЛАД ABS(ПРЕМИЯ-ОКЛАД) ABS(-35)

---------

-------------- ------------------------ --------------------------------- ---------

1600

300

-1300

1300

35

1250

500

-750

750

35

1250

1400

150

150

35

2850

 

 

 

35

1500

0

-1500

1500

35

950

 

 

 

35

6 строк выбрано.

Функція MOD

MOD( значення1 , значення2 );

Визначає частку від ділення першого числа на друге, тобто перше число за модулем другого.

SQL> ------------------

SQL> -- Вправа №29

SQL> ------------------

SQL> SELECT оклад, премия, MOD(оклад, премия), MOD(100, 40)

2FROM служ

3WHERE отдел_номер = 30

4ORDER BY премия;

ОКЛАД ПРЕМИЯ MOD(ОКЛАД,ПРЕМИЯ) MOD(100,40)

--------- ---------------- -------------------------------- ------------------

1500 0 1500 20

1600

300

100

20

1250

500

250

20

1250

1400

1250

20

2850

 

 

20

950

 

 

20

6 строк выбрано.

До числових функцій також належать:

LOG (

m , n )

– логарифм n за основою m

SIN (

n )

– синус n (у радіанах)

 

SINH ( n )

– синус гіперболічний n

 

TAN (

n )

– тангенс n

 

TANH ( n )

– тангенс гіперболічний

n

COS ( n )

– косинус n (у радіанах)

COS ( n )

– косинус гіперболічний

n

7.3.2.4. Функції над датами

Функції над датами оперують зі значеннями типу дата. Усі функції, що входять у цей клас, повертають значення типу дата, крім функції MONTHS_BETWEEN, що повертає числове значення.

Зберігання дат в Oracle

Oracle зберігає дати у внутрішньому числовому форматі, що включає: Століття, Рік, Місяць, День, Години, Хвилини, Секунди.

Формат представляється будь-якою датою за замовчуванням (див. маски форматування нижче). Oracle може зберігати дати в діапазоні від 1 січня 4712 року до н. е. до 4712 року н. е.

Псевдостовпець SYSDATE і таблиця DUAL

SYSDATE – це псевдостовпець, що містить поточну дату й час. Стовпець SYSDATE можна використовувати як і будь-який інший стовпець. Наприклад, можна видати поточну дату шляхом вказівки поля SYSDATE у реченні SELECT. Зручно для такого запиту взяти допоміжну таблицю з ім'ям DUAL. Ця таблиця належить користувачеві з ім'ям SYS (системному адміністраторові) і доступна всім користувачам тільки на читання. Вона містить один стовпець DUMMY і один рядок зі значенням «X». Таблиця DUAL зручна для завдання в запитах, коли ви хочете одержати одиничне

значення, не пов'язане з таблицями БД, наприклад, значення константи, псевдостовпця або арифметичного виразу, що не містить імен стовпців БД.

Щоб одержати поточну дату, виконайте:

SQL> SELECT SYSDATE

2 FROM SYS.DUAL;

SYSDATE

--------------

22.10.2006

Можна також вибрати стовпець SYSDATE з таблиці «служ», але в цьому випадку ви одержите 14 однакових значень – по одному в кожному рядку цієї таблиці. Саме тому в подібних випадках переважніше використати таблицю DUAL.

Застосування арифметичних операторів в операціях над датами

Завдяки тому, що дати зберігаються в числовому форматі, з ними можна робити обчислення, використовуючи арифметичні оператори, наприклад додавання й віднімання. До дати можна додати числову константу або відняти з однієї дати іншу.

Розглянемо оператори, які допускаються при роботі з датами.

 

Таблиця 7.9

 

Дії над датами

 

 

 

Оператори

Зміст дії

 

 

 

 

дата + число

Додає до дати певну кількість днів, повертаючи нову дату

 

 

 

 

дата - число

Віднімає з дати певну кількість днів, повертаючи нову

 

 

дату

 

 

 

 

дата - дата

Віднімає з однієї дати іншу, повертаючи число, що

 

 

позначає кількість днів між ними

 

 

 

 

дата + число / 24

Додає до дати певну кількість годин, повертаючи нову

 

 

дату

 

 

 

 

SQL> -----------------

SQL> -- Вправа №30

SQL> -----------------

SQL> SELECT оформлен, оформлен+7, оформлен-7, SYSDATEоформлен

2 FROM служ

3 WHERE оформлен LIKE '%_02_%';

ОФОРМЛЕН ОФОРМЛЕН+7 ОФОРМЛЕН-7 SYSDATE-ОФОРМЛЕН

------------------ ----------------------- ------------------- ---------------------------------

20.02.1999

27.02.1999

13.02.1999

610,61269

22.02.1999

01.03.1999

15.02.1999

608,61269

Віднімання стовпця «оформлений» (дати зарахування на роботу) з SYSDATE дозволяє визначити, скільки днів знаходиться на роботі кожний із службовців компанії.

Функція MONTHS_BETWEEN

MONTHS_BETWEEN( дата1 , дата2 );

Обчислює кількість місяців між двома датами. Результат може бути позитивним або негативним, залежно від того, яка дата на якому місці стоїть. Якщо дата1більш пізня, ніж дата2 , то результат позитивний. При цьому дробова частина результату відбиває залишок місяця.

SQL> ------------------

SQL> -- Вправа №31

SQL> ------------------

SQL> SELECT MONTHS_BETWEEN(SYSDATE, оформлен),

2MONTHS_BETWEEN('01.06.1995', '05.11.2001')

3FROM служ

4WHERE MONTHS_BETWEEN(SYSDATE, оформлен) > 13;

MONTHS_BETWEEN(SYSDATE,ОФОРМЛЕН) MONTHS_BETWEEN('01.06.1995','05.11.2001')

---------------------------------------------------------------- -----------------------------------------------------------------

22,181413

-77,12903

20,084639

-77,12903

20

-77,12903

24,826574

-77,12903

17,697542

-77,12903

40,439477

-77,12903

13,471735

-77,12903

15,633026

-77,12903

8 строк выбрано.