Функције¶
SQL подржава велики број библиотечких функција које су обично детаљно описане у документацији одабраног система за управљање базама података. Употреба функција и њихов детаљан опис превазилази домет овог курса. За оне који желе да знају више, поменућемо само неколико основних функција и илустровати кроз примере како се користе.
Функција substr
издваја подниску дате ниске. Аргументи су јој
ниска, почетна позиција (позиције се броје од један, а не од нула) и
број карактера.
Издвојити имена, презимена и иницијале свих ученика.
SELECT ime, prezime, substr(ime, 1, 1) || substr(prezime, 1, 1) AS inicijali
FROM ucenik;
Извршавањем упита добија се следећи резултат:
ime |
prezime |
inicijali |
---|---|---|
Петар |
Петровић |
ПП |
Милица |
Јовановић |
МЈ |
Лидија |
Петровић |
ЛП |
Петар |
Миловановић |
ПМ |
Ана |
Пекић |
АП |
… |
… |
… |
Функција length
одређује дужину ниске (број њених карактера).
Приказати сва имена ученика која имају три слова.
SELECT ime
FROM ucenik
WHERE length(ime) = 3;
Извршавањем упита добија се следећи резултат:
ime |
---|
Ана |
Ана |
Уна |
Теа |
Вук |
… |
Функције upper
и lower
преводе ниску у сва велика тј. сва мала
слова (не мењајући карактере који нису слова).
Функције max
и min
одређују максимум тј. минимум две (или
више) вредности које су им прослеђене. Ове функције су применљиве и на
датуме и на ниске (при чему треба обратити пажњу на колациону секвенцу
која одређује поредак ниски).
Када би сви ученици који су имали јединице и двојке поправили те оцене на тројке, прикажи како би изгледала табела оцена.
SELECT id, id_predmet, id_ucenik, max(ocena, 3) AS ocena, datum, vrsta
FROM ocena;
Извршавањем упита добија се следећи резултат:
id |
id_predmet |
id_ucenik |
ocena |
datum |
vrsta |
---|---|---|---|---|---|
11 |
1 |
1 |
3 |
2020-10-15 |
писмени задатак |
12 |
1 |
2 |
3 |
2020-10-15 |
писмени задатак |
13 |
1 |
3 |
3 |
2020-10-15 |
писмени задатак |
15 |
1 |
14 |
3 |
2020-10-15 |
писмени задатак |
16 |
1 |
15 |
3 |
2020-10-15 |
писмени задатак |
… |
… |
… |
… |
… |
… |
Изразом max(ocena, 3)
све оцене које су мање од 3 се претварају у
3, док оне веће од 3 остају непромењене.
Функција round
врши заокруживање датог реалног броја на најближи
цео број или на одређени број децимала.
Функција CAST(... AS ...)
врши конверзију типова података. На
пример, вредност израза CAST('123' AS INTEGER)
је цео број 123.
Постоји одређен број функција за рад са датумима и
временом. Најопштија од њих је функција strftime
која форматира
дати датум или време у задатом формату, а може се употребити и за
издвајање одређених делова датума или времена. Сваки део датума описан
је одређеним спецификатором:
%Y
– година%m
– месец%d
– дан%H
– сат%M
– минут%S
– секунд
На пример, strftime('%d/%m/%Y', datum_rodjenja)
форматира датум
рођења прочитан из табеле ученика у формату дан/месец/година
. Ако
се уместо датума прочитаног из базе наведе now
користи се текући
датум и време. На пример, strftime('%Y-%m-%d', now)
чита тренутни
датум у подразумеваном формату. С обзиром на значај тог подразумеваног
формата записа датума, уместо strftime
могуће је употребити
функцију date
која форматира датум у подразумеваном формату
година-месец-дан
. Слично, функција time
форматира време у
подразумеваном формату %H:%M:%S
тј. сат:минут:секунд
.
Списак и детаљан опис свих подржаних функција је доступан у званичној документацији система SQLite (https://www.sqlite.org/lang_corefunc.html и https://www.sqlite.org/lang_datefunc.html).
Прикажимо неколико примера употребе ових функција.
Неки изостанци су грешком уписани после последњег дана школе, 20. јуна 2021. Како би изгледала таблица изостанака ако би се сви ти изостанци преправили тако да им датум буде 20. јун 2021?
SELECT id, id_ucenik, MIN(datum, '2021-06-20') AS datum, cas, status
FROM izostanak;
Извршавањем упита добија се следећи резултат:
id |
id_ucenik |
datum |
cas |
status |
---|---|---|---|---|
1 |
1 |
2021-05-14 |
1 |
оправдан |
2 |
1 |
2021-05-14 |
2 |
неоправдан |
3 |
4 |
2021-05-14 |
1 |
нерегулисан |
4 |
4 |
2021-05-14 |
2 |
нерегулисан |
5 |
6 |
2021-06-01 |
1 |
неоправдан |
… |
… |
… |
… |
… |
Коришћењем функције за издвајање првог слова ниске одредити ученике мушког пола чије име почиње самогласником.
SELECT ime
FROM ucenik
WHERE pol = 'м' AND substr(ime, 1, 1) IN ('А', 'Е', 'И', 'О', 'У');
Извршавањем упита добија се следећи резултат:
ime |
---|
Огњен |
Андреј |
Алекса |
Урош |
Алекса |
… |
За сваког ученика приказати име, презиме, дан рођења, месец рођења и годину рођења (засебно, као целе бројеве).
SELECT ime, prezime,
CAST(strftime('%d', datum_rodjenja) AS INTEGER) AS dan,
CAST(strftime('%m', datum_rodjenja) AS INTEGER) AS mesec,
CAST(strftime('%Y', datum_rodjenja) AS INTEGER) AS godina
FROM ucenik;
Извршавањем упита добија се следећи резултат:
ime |
prezime |
dan |
mesec |
godina |
---|---|---|---|---|
Петар |
Петровић |
1 |
7 |
2006 |
Милица |
Јовановић |
3 |
4 |
2006 |
Лидија |
Петровић |
14 |
12 |
2006 |
Петар |
Миловановић |
8 |
12 |
2005 |
Ана |
Пекић |
23 |
2 |
2005 |
… |
… |
… |
… |
… |
Вежба¶
Наредних неколико упита пробај да напишеш самостално. Решења можеш да тестираш овде, а можеш све задатке да урадиш и у систему SQLite Studio.
За сваки регулисани изостанак издвојити идентификатор и ознаку
статуса (о
за оправдане и н
за неоправдане) у колони која се
опет назива status - употребити функцију за издвајање првог
карактера ниске.
Коришћењем функције за издвајање године из датума, приказати имена и презимена ученика рођених током 2006. године.