Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Funksionet e integruara të Oracle.

Tani le të shohim veçoritë e punës me funksionin TO_CHAR() në lidhje me shndërrimin e numrave. Gjatë kryerjes së këtij operacioni, funksioni ka sintaksën e mëposhtme:

TO_CHAR(numri, [, formati[, nls_parameter]])

Në këtë rast, funksioni TO_CHAR() konverton llojin NUMRI në lloj VARCHAR2. Tabela tregon se cilat formate ekzistojnë dhe si përdoren në konvertim:

Elementi i formatitNjë shembull i një vargu të këtij formatiPërshkrim
9 99 Çdo shifër 9 përfaqëson një shifër të rëndësishme të rezultatit. Numri shifra të rëndësishme vlera e kthyer është e barabartë me numrin e shifrave 9, kuptim negativ paraprihet nga një shenjë minus. Të gjitha zerat kryesore zëvendësohen me hapësira.
0 0999 Kthen një numër me zero kryesore dhe jo me hapësira.
0 9990 Kthehet një numër me zero pasuese dhe jo hapësira.
$ $999 Vlera e kthimit paraprihet nga një shenjë dollari, pavarësisht nga simboli i monedhës së përdorur, dhe mund të përdoret së bashku me zerat kryesore ose pasuese.
BB999Në vend të pjesës së plotë zero të numrit dhjetor kthehen boshllëqet.
MI999 MIKthen një numër negativ me një shenjë minus në fund dhe jo në fillim. Në vlerë pozitive do të ketë një hapësirë ​​në këtë vend.
SS9999Numri i kthyer paraprihet nga një shenjë: + për numrat pozitivë, numrat - për ato negative.
S9999SNumri i kthyer përfundon me një shenjë: + për numrat pozitivë, numrat - për ato negative.
PR99 PRJep një numër negativ në kllapa këndore "<", ">". numra pozitiv, ka hapësira në këtë vend.
D99D9Kthen një numër me pikën dhjetore në pozicionin e specifikuar. Numri 9 në të dy anët tregon numri maksimal numrat
G9G999Kthen një numër me një ndarës grupi në pozicionin e specifikuar. G
CC99Kthen një numër me simbolin e monedhës ISO në pozicionin e specifikuar. C mund të shfaqet në vargun e formatit të specifikuar më shumë se një herë.
LL999Kthen një numër me simbolin e monedhës së gjuhës kombëtare në pozicionin e specifikuar.
, 999,999 Kthen një numër të ndjekur nga një presje në pozicionin e specifikuar, pavarësisht nga grupi ndarës i zgjedhur.
. 99.99 Kthen një numër me pikën dhjetore në pozicionin e specifikuar, pavarësisht nga ndarësi dhjetor i zgjedhur.
V99V999Kthen një numër të shumëzuar me 10n, Ku nështë numri i shifrave 9 pas V. Nëse është e nevojshme, vlera rrumbullakohet.
EEEE9.99EEEEKthen një numër në shënimin shkencor.
R.M.R.M.Kthen një numër duke përdorur numra romakë të mëdhenj.

Për shembull, këtu është blloku i mëposhtëm:

AKTIVIZO OUTPUT SERVERVER ON BEGIN -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(534523)); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(34387, "99999")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(5000, "9999$")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(-9, "9S")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(-34, "S99")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(3 - 5, "999MI")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(7 - 3, "S9")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(4 - 5, "99PR")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(8900, "L9999")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(10000000, "9.9EEEE")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(10, "RM")); -- Funksioni TO_CHAR() -- DBMS_OUTPUT.put_line(TO_CHAR(105, "RM")); FUND; /

Pas nisjes marrim:

SQL> BEGIN 2 3 -- Funksioni TO_CHAR() -- 4 DBMS_OUTPUT.put_line(TO_CHAR(534523)); 5 6 -- Funksioni TO_CHAR() -- 7 DBMS_OUTPUT.put_line(TO_CHAR(34387, "99999")); 8 9 -- Funksioni TO_CHAR() -- 10 DBMS_OUTPUT.put_line(TO_CHAR(5000, "9999$")); 11 12 -- Funksioni TO_CHAR() -- 13 DBMS_OUTPUT.put_line(TO_CHAR(-9, "9S")); 14 15 -- Funksioni TO_CHAR() -- 16 DBMS_OUTPUT.put_line(TO_CHAR(-34, "S99")); 17 18 -- Funksioni TO_CHAR() -- 19 DBMS_OUTPUT.put_line(TO_CHAR(3 - 5, "999MI")); 20 21 -- Funksioni TO_CHAR() -- 22 DBMS_OUTPUT.put_line(TO_CHAR(7 - 3, "S9")); 23 24 -- Funksioni TO_CHAR() -- 25 DBMS_OUTPUT.put_line(TO_CHAR(4 - 5, "99PR")); 26 27 -- Funksioni TO_CHAR() -- 28 DBMS_OUTPUT.put_line(TO_CHAR(8900, "L9999")); 29 30 -- Funksioni TO_CHAR() -- 31 DBMS_OUTPUT.put_line(TO_CHAR(10000000, "9.9EEEE")); 32 33 -- Funksioni TO_CHAR() -- 34 DBMS_OUTPUT.put_line(TO_CHAR(10, "RM")); 35 36 -- Funksioni TO_CHAR() -- 37 DBMS_OUTPUT.put_line(TO_CHAR(105, "RM")); 38 39 FUND; 40 / 534523 34387 5000 $ 9- -34 2- +4 RUR 8900 1.0E+07 X CV PL/SQL Procedura e përfunduar me sukses.

Dhe për hir të plotësisë, le të shohim funksionin TO_NUMBER(), pasi me TO_CHAR() ata janë praktikisht binjakë, por nga dy anë të kundërta. Sintaksë TO_NUMBER tjetër:

TO_NUMBER (varg_karakteri, [, formati [, nls_parameter]])

në këtë rast"character_string" është një lloj CHAR ose VARCHAR2, i cili kur aplikohet në "format" konvertohet në tip NUMRI. "format" në këtë funksion është i njëjtë si për TO_CHAR(). Kjo është mjaft e thjeshtë. Dhe, nëse në shembullin e mëparshëm ndryshojmë, për shembull, rreshtin e tretë nga fundi si kjo:

DBMS_OUTPUT.put_line(TO_CHAR(TO_NUMRI("10000000", "9.9EEEE"), "9.9EEEE"));

Në artikullin e mëparshëm, ne shikuam funksionet e integruara për të punuar me vargje. Në këtë artikull do flasim në lidhje me funksionet për të punuar me funksionet e konvertimit të datës/kohës dhe tipit për datat. Për të ruajtur datën dhe kohën, Oracle ofron një lloj të veçantë DATE. ME pikë fizike shikoni atë një numër thyesor, pjesë e tërë e cila ruan numrin e ditëve që nga një datë e caktuar bazë, dhe ajo e pjesshme ruan kohën. Kjo ju lejon të performoni mbi datat veprimet aritmetike- mbledhje dhe zbritje.

Funksioni SYSDATE

Ky është një nga funksionet më të përdorura; kthen datën dhe kohën aktuale sipas orës së serverit.

Funksioni LAST_DAY(d)

Kthen ditën e fundit të muajit të përcaktuar në datën d.

ZGJEDH SISDATE d,

DITA_E FUNDIT(SYSDATE) d1

Funksioni MONTHS_BETWEEN(d1, d2)

Funksioni MONTH_BETWEEN kthen numrin e muajve midis dy datave d1 dhe d2, duke marrë parasysh shenjën si d1-d2, numri i kthyer është një thyesë.

ZGJIDH MUAJT_BETWEEN("2.09.2006", "2.05.2006") d1,

MONTHS_BETWEEN("12.09.2006", "2.05.2006") d2,

MONTHS_BETWEEN("2.05.2006", "12.09.2006") d3

Le të shqyrtojmë shembuj tipikë- shkurtimi i datës në orë, ditë, muaj dhe vit. Maska e formatit të paracaktuar është "DD"

ZGJIDH SISDATE d1,

TRUNC(SYSDATE, "HH24") d2,

TRUNC(SYSDATE, "DD") d3,

TRUNC(SYSDATE, "MM") d4,

TRUNC(SYSDATE, "YYYY") d5

Formatoni maskat e lejuara për funksionet TRUNC dhe ROUND

Le të hedhim një vështrim më të afërt në maskat e formatit dhe veçoritë e përdorimit të tyre.

Maskë

Qëllimi

Dita e parë e shek

VITI, ose YYYY, ose YY, ose Y

Dita e pare e vitit

Dita e parë e tremujorit

MUAJ, ose HËN, ose MM

Dita e pare e muajit

Të njëjtën ditë të javës me ditën e parë të vitit aktual

Të njëjtën ditë të javës me ditën e parë të muajit aktual

DAY ose DY ose D

Dita e parë e javës

HH, ose HH12, ose HH24

Funksioni TO_DATE(rr[,maskë [,nls_lang]])

Funksioni TO_DATE konverton vargun str në një datë. Konvertimi kryhet duke përdorur maskën e maskës, nëse është e specifikuar. Nëse maska ​​nuk është e specifikuar, atëherë merret maska ​​e paracaktuar. Nëse specifikoni një maskë, mund të specifikoni një parametër më shumë - gjuhën e përdorur kur formatoni emrat e muajve dhe ditëve. Nëse ka një gabim në analizimin e vargut në përputhje me maskën e specifikuar, ndodh një gabim: situatë e jashtëzakonshme. Gabimi më i zakonshëm është "ORA-01830: Shablloni i formatit të datës përfundon përpara se të konvertohet i gjithë vargu i hyrjes." Për më tepër, shpesh haset gabimi "ORA-01821: formati i datës nuk njihet" - ndodh kur specifikohet një maskë e formatit të pavlefshëm.

SELECT TO_DATE("12.09.2006") d

Formatoni maskat e lejuara për funksionet TO_CHAR kur formatoni datat

Shekulli, me shenjë minus para datave p.e.s.

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE-1000000, "SCC") d2

26.09.2006 17:14:21

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "YYYY") d2

Viti, i shkruar me fjalë duke përdorur gjuhën aktuale kombëtare.

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "YEAR") d2

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "MM") d2

Emri i muajit me fjalë.

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "MUAJ") d2

Java e vitit.

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "WW") d2

Dita e vitit.

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "DDD") d2

Dita e javës shkruhet me fjalë, nëse është e nevojshme, plotësohet me deri në nëntë karaktere me hapësira.

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "DITA") d2

Data e kalendarit Julian. Është numri i ditëve nga 01/01/4712 pes.

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "J") d2

Ora e ditës në një shkallë 12-orëshe (1-12).

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "HH") d2

Minutat (0-59).

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "MI") d2

Kjo maskë e formatit është e dobishme për matjen e intervaleve kohore në sekonda.

Shenjat e pikësimit. Ato nxirren në vendet e duhura në datën e formatuar.

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "DD.MM.YYYY HH24.MI") d2,

TO_CHAR(SYSDATE, "DD/MM/YYYY HH12.MI PM") d3

Elementet e maskës së formatit të krijuar për të shfaqur informacionin e tekstit janë të ndjeshme ndaj shkronjave të vogla - rasti kontrollon rastin e tekstit të formatuar. Le të shohim menaxhimin e regjistrave duke përdorur maskën e formatit DAY si shembull:

ZGJIDH SISDATE d1,

TO_CHAR(SYSDATE, "DAY") d2,

TO_CHAR(SYSDATE, "Dita") d3,

TO_CHAR(SYSDATE, "ditë") d4

26.09.2006 17:47:45

Është e lehtë të shihet se nëse maska ​​është e shkruar me shkronja të mëdha, atëherë ajo është e formatuar vlera e tekstit kthehet me shkronja të mëdha. Nëse në pjesën e poshtme, vlera e formatuar do të jetë gjithashtu në atë të poshtme. Dhe së fundi, regjistrimi i maskës me shkronje e madhe bën që teksti i krijuar të formatohet në mënyrë që të fillojë me shkronjë të madhe.

konkluzioni

Në këtë artikull ne shqyrtuam të gjitha pajisjet kryesore të integruara Funksionet e Oracle, i projektuar për të punuar me datat dhe për të kryer operacione të konvertimit të tipit me llojin "datë". Në artikullin tjetër, ne do të shikojmë funksionet e konvertimit dhe formatimit të numrave dhe do të kalojmë në pyetje praktike duke përdorur funksionet e diskutuara më parë.

Për të thjeshtuar punën me vargjet, ekzistojnë një sërë funksionesh të integruara, të cilat lehtësojnë shumë operacione të tilla si konvertimi i vargjeve në të dhëna të llojeve të tjera, kërkimi i një nënvargu në një varg, përcaktimi i gjatësisë së një vargu etj. Në këtë artikull do të shikojmë funksionet më të zakonshme për të punuar me vargje.

1) Funksioni për përcaktimin e gjatësisë së një vargu LENGTH(string), kthen numrin e karaktereve në varg, duke përfshirë hapësirat pasuese.

SELECT LENGTH('string') FROM DUAL do të kthejë vlerën 7.

2) Funksionet e konvertimit të shkronjave të karaktereve UPPER(string), LOWER(string), INITCAP(string). Për të kthyer karakteret në shkronja të mëdha, përdorni funksionin UPPER().

SELECT UPPER('string') FROM DUAL do të kthejë STRING.

Nëse keni nevojë të konvertoni karakteret e vargut në shkronja të vogla Përdoret funksioni LOWER().

SELECT LOWER('STring') FROM DUAL do të kthejë vargun.

Funksioni INITCAP konverton çdo karakter të parë të një fjale në shkronja të mëdha dhe të gjitha karakteret e tjera në shkronja të vogla, me kusht që karakteri ndarës i fjalës të jetë një hapësirë.

SELECT INITCAP('string1 string2') FROM DUAL do të kthejë String1 String2.

3) Funksionet për shkurtimin e hapësirave kryesore dhe pasuese LTRIM(string), RTRIM(string), TRIM(string). Prandaj, funksioni i parë shkurton të gjitha hapësirat kryesore të linjës, i dyti - të gjitha hapësirat pasuese dhe i treti - të gjitha hapësirat kryesore dhe pasuese.

SELECT LTRIM(' str1') FROM DUAL do të kthejë vargun str1,
SELECT RTRIM('str2') FROM DUAL do të kthejë vargun str2,
SELECT TRIM(' str3') FROM DUAL do të kthejë vargun str3.

4) Funksioni i zëvendësimit të një pjese të një vargu me një varg tjetër REPLACE (vargu_origjinal, nënvargu i zëvendësuar, zëvendësimi i nënvargut). Për qartësi më të madhe, le të shohim një shembull ku një numër ruhet në një fushë të caktuar teksti në një tabelë. Për më tepër, karakteri ndarës midis numrit të plotë dhe pjesë thyesore në disa fusha ka “.”, dhe për përpunim të mëtejshëm të të dhënave duhet të jetë “,” në të gjitha fushat. Për këtë do të përdorim Funksioni REPLACE në mënyrën e mëposhtme. REPLACE (fusha 1, '.', ',') dhe të gjitha "." në fushën e fushës do të zëvendësohet me simbolin “,”.

SELECT REPLACE('My_string','_','@') FROM DUAL do të kthejë vargun My@string.

5) Funksionet për konvertimin e të dhënave në lloje të tjera të dhënash. TO_CHAR(numri) konverton një numër në tekst. TO_NUMBER(string) konverton tekstin në një numër. TO_DATE (vargu, data_format) konverton një varg në një format specifik të datës.

SELECT TO_CHAR(123) FROM DUAL do të kthejë rreshtin 123,
SELECT TO_NUMBER('12345') FROM DUAL do të kthejë numrin 12345,
SELECT TO_DATE('01.01.2010','dd.mon.vvvv') FROM DUAL do të kthejë datën 01.JAN.2010.

6) Funksioni për përcaktimin e shfaqjes së një nënvargu në një varg INSTR (varg_burimi, nënvarg, karakter_numër). Ky funksion ju lejon të përcaktoni numrin e karaktereve në linjë origjinale nga i cili fillon nënvargu i kërkuar (nëse ka një të tillë). Përndryshe, kthehet 0. Për shembull, duhet të përcaktojmë të gjitha pozicionet në tabelën Tabela 1, në emër të së cilës shfaqet nënvargu “manager”. Operatori i mëposhtëm është mjaft i përshtatshëm për këtë

ZGJIDH * NGA TABELA 1 WHERE INSTR(POST, 'menaxher', 1) > 0.

Kjo eshte ZGJIDH deklaratën do të shfaqë vetëm ato rekorde nga tabela TABELA 1 ku do të gjendet nënvargu i kërkuar “menaxher”. Për më tepër, kërkimi do të kryhet nga karakteri i parë. Nëse kërkimi duhet të kryhet nga një pozicion tjetër, atëherë numri i karakterit për të filluar kërkimin tregohet në parametrin e tretë.

SELECT INSTR('Small string', 'string', 1) FROM DUAL do të kthejë vlerën 7,
SELECT INSTR('Small string', 'String', 1) FROM DUAL do të kthejë vlerën 0.

7) Funksioni për zgjedhjen e një nënvargu në vargun burimor SUBSTR (vargu_burimi, numri_karakter_fillestar, numri_karaktereve). Le të shqyrtojmë këtë shembull: tabela e përdoruesve ruan adresën në formën e emrit të lokalitetit, emrit të rrugës dhe numrit të shtëpisë. Për më tepër, ne e dimë me siguri se rreptësisht 20 karaktere janë caktuar për emrin e një lokaliteti (nëse emri i një lokaliteti është më pak se 20 karaktere, atëherë pjesa tjetër është e mbushur me hapësira), për emrin e një rruge 30 karaktere, për numri i shtëpisë 3 karaktere. Më pas, ne duhet të transferojmë të gjitha adresat nga tabela jonë në një tjetër, dhe në të njëjtën kohë, të tre komponentët e adresës duhet të jenë në fusha të ndryshme. Për të zgjedhur komponentët e adresës, përdorni funksionin SUBSTR().

SELECT SUBSTR(TABLE_1.ADDRESS, 1, 20) QYTET, SUBSTR(TABLE_1.ADDRESS, 21, 30) RRUGË, SUBSTR(TABLE_1.ADDRESS, 52, 3) QYTET NGA TABLE_1

Sigurisht, për të transferuar të dhëna duhet të përdorni operatorin INSERT, por për të kuptuar funksionimin e funksionit SUBSTR, shembulli i diskutuar është mjaft i përshtatshëm.
SELECT SUBSTR('My_string', 4, 3) FROM DUAL do të kthejë vargun str.

Funksionet e diskutuara më sipër mund të përdoren në parametrat e hyrjes. Pra, nëse duhet të zgjedhim të gjitha karakteret pas një karakteri specifik, atëherë mund të kalojmë numrin e karakterit të kërkuar nga funksioni INSTR në funksionin SUBSTR. Për shembull, nëse duhet të transferoni të gjithë karakteret nga një fushë tabele që ndodhen pas ",", atëherë mund të përdorni këtë ndërtim
ZGJIDH SUBSTR(vargu ime, INSTR(vargu ime, ',', 1), LENGTH(vargu ime)- INSTR(vargu ime, ',', 1)+1) NGA DUAL.
Për të përcaktuar karakterin fillestar, ne thërrasim funksionin INSTR(), i cili do të kthejë numrin e karakterit të shfaqjes së parë të nënvargjeve ",". Më pas, ne përcaktojmë numrin e karaktereve në fund të vargut si diferencë midis gjatësisë së vargut dhe numrit të shfaqjes së parë të nënvargut.

8) Për të përcaktuar kodin e karakterit, përdoret funksioni ASCII (string), i cili kthen kodin e 1 karakterit të vargut. Për shembull

SELECT ASCII(W) FROM DUAL do të kthejë vlerën 87.

9) Funksioni i anasjelltë Konvertimi i një kodi të karakterit në një karakter CHR (numri).

SELECT CHR(87) FROM DUAL do të kthejë karakterin W.

Funksionet për të punuar me numra në Oracle.

Oracle DBMS Ekzistojnë një sërë funksionesh për të punuar me numra. Këto përfshijnë funksione për ngritjen e një numri në një fuqi POWER(), rrumbullakimi ROUND(), etj.

1) Funksioni ABS (numri) kthen vlerën absolute të argumentit.
SELECT ABS(-3) FROM DUAL do të kthejë vlerën 3.

2) Funksioni CEIL(numri) kthen numrin më të vogël të plotë më të madh ose të barabartë me parametrin e kaluar.
SELECT CEIL(4.5) FROM DUAL do të kthejë vlerën 5.

3) Funksioni FLOOR(numri) kthen numrin më të madh të plotë më të vogël ose të barabartë me parametrin e kaluar.
SELECT FLOOR(3.8) FROM DUAL do të kthejë vlerën 3.

4) Funksioni MOD(numër_1, numër_2) kthen pjesën e mbetur të pjesëtimit të parametrit të parë me të dytin.
SELECT MOD(5, 3) FROM DUAL do të kthejë vlerën 2. Shënim. Nëse parametri i dytë është 0, atëherë funksioni kthen parametrin e parë.

5) Funksioni rrumbullakues ROUND (numri_1, numri_2). Rrumbullakos parametrin e parë të kaluar në numrin e shifrave të kaluara në parametrin e dytë. Nëse parametri i dytë nuk specifikohet, atëherë ai merret i barabartë me 0, domethënë, rrumbullakimi kryhet në vlerën e numrit të plotë. Shembuj
SELECT ROUND(101.34) FROM DUAL do të kthejë vlerën 101,
SELECT ROUND(100.1268, 2) FROM DUAL do të kthejë vlerën 100.13
SELECT ROUND(1234000.3254, -2) FROM DUAL do të kthejë vlerën 1234000,
SELECT ROUND(-100.122, 2) FROM DUAL do të kthehet -100.12.

6) Funksioni i shkurtimit të vlerës TRUNC (numri_1, numri_2). Kthen vlerën e parametrit të parë të cunguar në numrin e numrave dhjetorë të specifikuar në parametrin e dytë. Shembuj
SELECT TRUNC(150.58) FROM DUAL do të kthejë vlerën 150
SELECT TRUNC(235.4587, 2) FROM DUAL do të kthehet 235.45
SELECT TRUNC(101.23, -1) FROM DUAL do të kthejë vlerën 100

7) Oracle DBMS ka një sërë funksionesh trigonometrike SIN(numër), COS(numër), TAN(numër) dhe anasjelltas të tyre ACOS(numër), ASIN(numër), ATAN(numër). Ata kthejnë vlerën e funksionit trigonometrik që i përgjigjet emrit. Për funksionet e drejtpërdrejta, parametri është vlera e këndit në radianë, dhe për funksionet e anasjellta, vlera e funksionit. Shembuj
SELECT COS(0.5) FROM DUAL do të kthejë vlerën 0.877582561890373
SELECT SIN(0.5) FROM DUAL do të kthejë vlerën 0.479425538604203
SELECT TAN(0.5) FROM DUAL do të kthejë vlerën 0.546302489843791
SELECT ACOS(0.5) FROM DUAL do të kthejë vlerën 1.0471975511966
SELECT ASIN(0.5) FROM DUAL do të kthehet 0.523598775598299
SELECT ATAN(0.5) FROM DUAL do të kthejë vlerën 0.463647609000806

8) Funksionet hiperbolike. SINH (numri),
COSH(numri), TANH(numri). SINH() kthen sinusin hiperbolik të parametrit të kaluar, COSH() kthen kosinusin hiperbolik të parametrit të kaluar, TANH() kthen tangjentën hiperbolike të parametrit të kaluar. Shembuj
SELECT COSH(0.5) FROM DUAL do të kthejë vlerën 1.12762596520638
SELECT SINH(0.5) FROM DUAL do të kthejë vlerën 0.521095305493747 SELECT TANH(0.5) FROM DUAL do të kthejë vlerën 0.46211715726001

9) Funksioni i fuqisë së fuqisë (numri_1, numri_2). Shembuj
SELECT POWER(10, 2) FROM DUAL do të kthejë vlerën 100
SELECT POWER(100, -2) FROM DUAL do të kthejë vlerën 0.0001

10) Funksionet logaritmike. LN(numri) kthen logaritmin natyror të parametrit të kaluar, LOG(numri_1, numri_2) kthen logaritmin e parametrit të dytë të kaluar në bazën e kaluar në parametrin e parë. Për më tepër, parametri i parë duhet të jetë më i madh se zero dhe jo i barabartë me 1. Shembuj
SELECT LN(5) FROM DUAL do të kthejë vlerën 1.6094379124341
SELECT LOG(10, 3) FROM DUAL do të kthejë vlerën 0.477121254719662

11) Funksioni i nxjerrjes rrenja katrore SQRT (numri). Shembull
SELECT SQRT(4) FROM DUAL do të kthejë vlerën 2.

12) Funksioni që ngre numrin e në fuqinë EXP(numri). Shembull
SELECT EXP(2) FROM DUAL do të kthejë vlerën 7.38905609893065.

Funksionet e datës së Oracle

Në praktikë, është shumë shpesh e nevojshme të analizohen të dhënat në formën e datave, të kryhen disa operacione mbi to dhe të ndryshohet formati. Të gjitha këto operacione janë zbatuar tashmë si funksione të integruara. Le të shohim më themeloret prej tyre.

1) ADD_MONTHS(data, numri_i_muajve) kthen një datë të ndarë nga data e kaluar në parametrin e parë me numrin e muajve të specifikuar në parametrin e dytë. Shembuj
SELECT ADD_MONTHS('01-JAN-2010', 2) FROM DUAL do të kthejë datën '03/01/2010'
SELECT ADD_MONTHS('01-JAN-2010', -3) FROM DUAL do të kthejë datën '01.10.2009'
SELECT ADD_MONTHS('30-JAN-2010', 1) FROM DUAL do të kthejë datën '02/28/2010'

2) Për të përcaktuar data aktuale dhe koha kur aplikohet funksioni SYSDATE. Shtrirja e zbatimit të këtij funksioni është shumë më e gjerë nga sa mund të duket në shikim të parë. Para së gjithash, ky është kontroll mbi futjen e të dhënave në bazën e të dhënave. Shumë tabela kanë një fushë të veçantë për ruajtjen e datës së modifikimit të fundit. Është gjithashtu shumë i përshtatshëm për të kontrolluar disa parametra të hyrjes për raporte, veçanërisht nëse ato nuk duhet të jenë më të mëdha se data aktuale. Përveç datës, ky funksion e kthen edhe kohën e saktë në sekonda. Shembull
SELECT SYSDATE FROM DUAL do të kthejë datën '05/22/2010 14:51:20'

3) Nëse keni nevojë të përcaktoni ditën e fundit të muajit, atëherë funksioni LAST_DAY(data) është mjaft i përshtatshëm për këtë. Mund të përdoret për të përcaktuar numrin e ditëve të mbetura në një muaj.
ZGJIDH DITËN E FUNDIT(SYSDATE) – SYSDATE NGA DUAL.
Si rezultat i ekzekutimit të kësaj deklarate, do të shfaqet numri i ditëve nga data aktuale deri në fund të muajit. Shembull
SELECT_DITA E LAST_DAY('15-SHKURT-2010') FROM DUAL do të kthejë datën '02/28/2010'.

4) Funksioni për përcaktimin e numrit të muajve ndërmjet datave MONTHS_BETWEEN (datë_1, datë_2). Shembuj
SELECT MONTHS_BETWEEN('01-KORRIK-2009', '01-JAN-2010') FROM DUAL do të kthehet -6
SELECT MONTHS_BETWEEN('01-KORRIK-2009', '10-JAN-2010') FROM DUAL do të kthehet -6,29032258064516.
Shënim. Nëse ditët e muajve janë të njëjta, atëherë funksioni kthen një numër të plotë, përndryshe rezultati do të jetë i pjesshëm dhe numri i ditëve në muaj do të jetë 31.

5) Funksioni NEXT_DAY(data, dita_javës) ju lejon të përcaktoni datën tjetër nga data e kaluar në parametrin e parë, që korrespondon me ditën e javës së kaluar në parametrin e dytë. Shembull
SELECT NEXT_DAY('01-KORRIK-2009', 'hën') FROM DUAL do të kthejë datën '07/06/2009', domethënë, e hëna tjetër pas datës 6 korrik 2009 ka ndodhur.

6) Rrumbullakimi i datës ROUND (data, formati). Parametri i dytë është opsional, nëse nuk specifikohet, merret si 'DD', domethënë rrumbullakimi do të bëhet në ditën më të afërt. Shembuj
SELECT ROUND(SYSDATE) FROM DUAL do të kthejë datën '05/23/2010'
SELECT ROUND(SYSDATE, MUAJ) FROM DUAL do të kthejë datën '06/01/2010', e rrumbullakosur në ditën e parë më të afërt të muajit.

7) Shkurtimi i datës. Funksioni TRUNC (data, formati). Ashtu si ai i diskutuar më sipër, mund të mos ketë një parametër të dytë. Në këtë rast, shkurtimi do të kryhet deri të nesërmen. Shembuj
SELECT TRUNC(SYSDATE) FROM DUAL do të kthejë datën '05/22/2010'
SELECT TRUNC(SYSDATE, 'WW') FROM DUAL do të kthejë datën '05/01/2010'
SELECT TRUNC(SYSDATE, 'Day') FROM DUAL do të kthejë datën '05/16/2010'.

Funksionet e konvertimit të të dhënave në Oracle

Ky seksion i kushtohet shqyrtimit të konvertimit të të dhënave në formate të ndryshme. Në praktikë, situatat janë mjaft të zakonshme kur është e nevojshme të trajtohen vlerat e vargut si numra dhe anasjelltas. Pavarësisht nga numri i vogël i funksioneve, aftësitë e tyre janë mjaft të mjaftueshme për të zgjidhur probleme shumë komplekse të aplikimit.

1) TO_CHAR (të dhënat, formati). Në pamje të parë, sintaksa është mjaft e thjeshtë, por për shkak të parametrit të dytë mund të përshkruani me shumë saktësi se në çfarë formati duhet të konvertohen të dhënat. Pra, ju mund të konvertoni një datë dhe një vlerë numerike në një varg. Merrni parasysh opsionin e konvertimit të një date në një varg. Vlerat e formateve më të zakonshme janë dhënë në tabelë, më shumë informacion të plotë të përfshira në dokumentacionin teknik.

Tabela e vlerave të formatit për konvertimin e një numri në një varg.

SELECT TO_CHAR(SYSDATE, 'D-MUAJ-YY') FROM DUAL do të kthejë vargun '7-MAJ -10'
SELECT TO_CHAR(SYSDATE, 'DDD-MM-YYYY') FROM DUAL do të kthejë vargun '142-05-2010'
SELECT TO_CHAR(SYSDATE, 'Q-D-MM-YYY') FROM DUAL do të kthejë vargun '2-7-05-010'
SELECT TO_CHAR(1050, '9.99EEEE) FROM DUAL do të kthejë vargun '1,050E+03'
SELECT TO_CHAR(1400, '9999V999') FROM DUAL do të kthejë vargun '1400000'
SELECT TO_CHAR(48, 'RM') FROM DUAL do të kthejë vargun 'XLVIII'

2) Funksioni për konvertimin e një vargu në një datë TO_DATE (varg, format). Vlerat e mundshme të formatit tashmë janë diskutuar më lart, kështu që unë do të jap disa shembuj të përdorimit të këtij funksioni. Shembuj
SELECT TO_DATE('01/01/2010', 'DD.MM.YYYY') FROM DUAL do të kthejë datën '01/01/2010'
SELECT TO_DATE('01.JAN.2010', 'DD.MON.YYYY') FROM DUAL do të kthejë datën '01.01.2009'
SELECT TO_DATE('15-01-10', 'DD-MM-YY') FROM DUAL do të kthejë datën '01/15/2010'.

3) Funksioni për konvertimin e një vargu në një vlerë numerike TO_NUMBER (varg, format). Vlerat më të zakonshme të formatit janë renditur në tabelë, kështu që le të shohim përdorimin e këtij funksioni duke përdorur shembuj. Shembuj
SELECT TO_NUMBER('100') FROM DUAL do të kthejë numrin 100
SELECT TO_NUMBER('0010.01', '9999D99') FROM DUAL do të kthejë numrin 10.01
SELECT TO_NUMBER("500,000","999G999") FROM DUAL do të kthejë numrin 500000.

S. Moiseenko

Brenda dy shifrave dhjetore, përcaktoni sasinë mesatare të armëve për klasat e luftanijeve.

Mendova se ka vetëm një problem në këtë detyrë, dhe ai është rrumbullakimi. Por kohët e fundit kam marrë zgjidhjen e mëposhtme:

SELECT SUM(shuma_g)/SUM(count_g) FROM
(SELECT SUM(numGuns) AS sum_g , COUNT(*) AS count_g
FROM Classes BASHKOHU I BRENDSHËM Anijet ON Classes.class = Ships.class
WHERE shkruani = "bb"
BASHKIM
SELECT SUM(numGuns) AS sum_g , COUNT(*) AS count_g
FROM Classes Rezultatet e BASHKIMIT TË BRENDSHËM ON Classes.class = Outcomes.ship
WHERE shkruani = "bb") AS a

Është shumë e pasur për analizën e gabimeve J. Le të fillojmë nga rrumbullakimi. Numri i armëve është një numër i plotë (sipas llojit të kolonës, jo sipas logjikës!). Kjo është arsyeja pse shuma në vetvete do të jetë një numër i plotë. Kur pjesëtojmë numra të plotë në SQL Server, marrim gjithmonë një numër të plotë. Dhe rezultati nuk arrihet duke rrumbullakosur, por duke HEDHUR pjesën thyesore. Për shembull, ekzekutoni pyetjen e mëposhtme:

Rezultati do të jetë 0, dhe kjo konfirmon atë që kemi thënë. Pra, për të bërë përmirësime kozmetike të kësaj pyetjeje, të paktën një operand duhet të konvertohet në llojin real. Siç kam shkruar në Ndihmën në www.sql-ex Faqja .ru, mund të përdorni konvertimin e tipit të nënkuptuar:

ZGJIDH SHUMËN(shuma_g)*1.0/SUM(count_g)

domethënë, kur shumëzohet me një unitet real, numëruesi bëhet vetë një numër real.

Tani, pasi duhet të numërojmë mesataren sipas klasave, në fillim, nuk duhet të marrim parasysh anijet dhe, së dyti, nuk kemi nevojë të kujtojmë anijet nga tabela e Rezultateve.

Por për të analizuar gabimet le të shqyrtojmë zgjidhjen në interpretimin e autorit të saj, domethënë do të përcaktojmë vlerën mesatare nga të gjitha anijet lineare nga baza e të dhënave, dhe kjo rezulton të jetë detyra 54. Unë kam diskutuar se detyrë por me një gabim tjetër.

Pra, numri i armëve dhe sasia numërohen veçmas nga anijet nga tabela e Anijeve dhe nga kryeanijet nga tabela e Rezultateve. Më pas, në pyetjen kryesore ne përmbledhim numrin e armëve dhe sasia e anijeve në çdo tabelë dhe ndani të parën me të dytën për të marrë vlerën mesatare.

Le të diskutojmë një shembull. Le të ketë 2 anije me 11 dhe 8 armë në tabelën e Anijeve dhe 1 anije me 11 armë në tabelën e Rezultateve. Pra marrim 3 anije me 30 armë. Vlera mesatare është 30/3= 10. A është kjo e saktë? Jo, domethënë është e saktë vetëm për raste të caktuara, ndërsa ne duhet të shkruajmë një pyetje që do të jetë e saktë për çdo të dhënë. Unë shoh disa shembuj për ta vërtetuar këtë.

Së pari. Po sikur të mos ketë anije kryesore që korrespondon me kushtet e detyrës në tabelën e Rezultateve? Atëherë do të kthehet pyetja e dytë: 0 anije, numri i armëve është NULL. Si rezultat i llogaritjes së mesatares do të marrim

(19 + NULL)/(2+0) = NULL

Së dyti. Le të jetë anija kryesore e klasës 'bb' si në tabelën Anijet ashtu edhe në tabelën e Rezultateve, kjo do të thotë se është e njëjta anije. Atëherë duhet të marrim 19/2 por jo 30/3 siç paraqet zgjidhja.

Së treti. Po sikur në situatën e mëparshme në anije, anija kryesore të merrte pjesë në beteja dy herë? Atëherë do të marrim (19 + 22) /(2 + 2) në vend të 19/2 tonë.

E katërta… Mendojeni vetë. Kështu formohet baza e kontrollit në faqe J.

» Shembujt e dhënë këtu mund të bëhen drejtpërdrejt në faqen e internetit duke zgjedhur kutinë "Pa kontrolluar" në Faqja me ushtrime SELECT.

Artikujt më të mirë mbi këtë temë