Nvl sql აღწერა. NVL ტრანსფორმაციები მონაცემთა სხვადასხვა ტიპებისთვის

ჩვენ ცოტა ადრე შევეხეთ წყობილ ფუნქციებს, ახლა მოდით განვიხილოთ ისინი ცოტა უფრო დეტალურად. ჩვენ ასევე განვიხილავთ NULL მნიშვნელობასთან მუშაობის ფუნქციებს და ფუნქციებს, რომლებიც ხელს უწყობენ განშტოების ოპერაციის განხორციელებას მოთხოვნაში.

ჩადგმული ფუნქციები

ჩადგმული ფუნქციები იყენებენ ერთი ფუნქციის დაბრუნების მნიშვნელობას, როგორც სხვა ფუნქციის შეყვანის პარამეტრს. ფუნქციები ყოველთვის აბრუნებენ მხოლოდ ერთ მნიშვნელობას. მაშასადამე, თქვენ შეგიძლიათ ფუნქციის გამოძახების შედეგი განიხილოთ როგორც ლიტერალური მნიშვნელობა, როდესაც იყენებთ მას პარამეტრად სხვა ფუნქციის გამოძახებისთვის. მწკრივის ფუნქციების ჩადგმა შესაძლებელია ბუდობის ნებისმიერ დონეზე. ერთი ფუნქციის გამოძახება ასე გამოიყურება

ფუნქცია1(პარამეტრი1, პარამეტრი2,…) = შედეგი

ფუნქციის პარამეტრის სხვა ფუნქციის გამოძახებით ჩანაცვლებამ შეიძლება გამოიწვიოს მსგავსი გამონათქვამები

F1(param1.1, F2(param2.1, param2.2, F3(param3.1)), param1.3)

ჩადგმული ფუნქციები ფასდება ჯერ, სანამ მათი შედეგები გამოყენებული იქნება სხვა ფუნქციების შეყვანის მნიშვნელობებად. ფუნქციები ფასდება ბუდის ღრმა დონიდან ყველაზე მაღლა მარცხნიდან მარჯვნივ. წინა გამოთქმა შესრულებულია შემდეგნაირად

  1. ფუნქცია F3(param1) ფასდება და დაბრუნებული მნიშვნელობა გამოიყენება მესამე პარამეტრად 2 ფუნქციისთვის, მოდით ვუწოდოთ მას param2.3.
  2. შემდეგ ფასდება ფუნქცია F2(param1, param2.2, param2.3) და დაბრუნებული მნიშვნელობა გამოიყენება F1 ფუნქციის მეორე პარამეტრად - param1.2.
  3. ბოლოს ფასდება ფუნქცია F1(param1, param2, param1.3) და შედეგი უბრუნდება გამოძახების პროგრამას.

ამრიგად, F3 ფუნქცია მესამე ბუდე დონეზეა.

განიხილეთ შეკითხვა

აირჩიეთ next_day(last_day(sysdate)-7, 'tue') ორმაგიდან;

  1. ამ მოთხოვნაში სამი ფუნქციაა, ქვემოდან ზევით - SYSDATE, LAST_DAY, NEXT_DAY. მოთხოვნა ასეთია
  2. ჩადგმული SYSDATE ფუნქცია შესრულებულია. ის აბრუნებს სისტემის მიმდინარე დროს. ვთქვათ, ამჟამინდელი თარიღია 2009 წლის 28 ოქტომბერი
  3. შემდეგ გამოითვლება მეორე დონის ფუნქციის შედეგი LAST_DAY. LAST_DATE('28-ოქტ-2009') ბრუნდება 2009 წლის ოქტომბრის ბოლო დღეს, ანუ 2009 წლის 31 ოქტომბერს.
  4. შემდეგ ამ თარიღს აკლდება შვიდი დღე - მიიღება 24 ოქტომბერი.
  5. საბოლოოდ, NEXT_DAY('24-ოქტ-2009', 'სამშაბათი') ფუნქცია ფასდება და მოთხოვნა აბრუნებს ოქტომბრის ბოლო სამშაბათს - რაც ჩვენს მაგალითში არის 27-ოქტ-2009.

საკმაოდ რთულია რთული გამონათქვამების გაგება და აგება მრავალი ჩადგმული ფუნქციის გამოძახების გამოყენებით, მაგრამ ამას დრო და პრაქტიკა მოჰყვება. შეგიძლიათ ასეთი გამონათქვამები ნაწილებად დაყოთ და ცალკე გამოსცადოთ. DUAL ცხრილი ძალიან სასარგებლოა მოთხოვნების შესამოწმებლად და ფუნქციის გამოძახების შედეგებისთვის. თქვენ შეგიძლიათ შეამოწმოთ და გამართოთ მცირე კომპონენტები, რომლებიც შემდეგ გაერთიანებულია ერთ დიდ სასურველ გამონათქვამში.

ფილიალის ფუნქციები

განშტოების ფუნქციები, ასევე ცნობილი როგორც IF-THEN-ELSE, გამოიყენება შესრულების გზის დასადგენად, გარკვეული გარემოებების მიხედვით. ფილიალის ფუნქციები აბრუნებს განსხვავებულ შედეგებს მდგომარეობის შეფასების შედეგის მიხედვით. ასეთი ფუნქციების ჯგუფში არის NULL მნიშვნელობით მუშაობის ფუნქციები: NVL, NVL2, NULLIF და COALESCE. ასევე ზოგადი ფუნქციები, რომლებიც წარმოდგენილია DECODE ფუნქციით და CASE გამოხატვით. DECODE ფუნქცია არის Oracle ფუნქცია, ხოლო CASE გამოხატულება არის ANSI SQL სტანდარტში.

NVL ფუნქცია

NVL ფუნქცია ამოწმებს სვეტის ან ნებისმიერი ტიპის მონაცემთა გამოხატვის მნიშვნელობას ნულოვანი მნიშვნელობისთვის. თუ მნიშვნელობა არის NULL, ის აბრუნებს ალტერნატიულ არა-NULL ნაგულისხმევ მნიშვნელობას, წინააღმდეგ შემთხვევაში დაბრუნდება თავდაპირველი მნიშვნელობა.

NVL ფუნქციას აქვს ორი საჭირო პარამეტრი და სინტაქსი არის NVL (ორიგინალი, ifnull), სადაც ორიგინალი არის ორიგინალური მნიშვნელობა შესამოწმებლად და ifnull არის ფუნქციის მიერ დაბრუნებული შედეგი, თუ ორიგინალი არის NULL. ifnull და ორიგინალური პარამეტრების მონაცემთა ტიპი უნდა იყოს თავსებადი. ანუ, ან მონაცემთა ტიპი უნდა იყოს იგივე, ან უნდა იყოს შესაძლებელი მნიშვნელობების უტყუარად გადაქცევა ერთი ტიპიდან მეორეზე. NVL ფუნქცია აბრუნებს იგივე მონაცემთა ტიპის მნიშვნელობას, როგორც ორიგინალური პარამეტრის მონაცემთა ტიპი. განვიხილოთ სამი შეკითხვა

შეკითხვა 1: აირჩიეთ nvl(1234) dual-დან;

შეკითხვა 2: აირჩიეთ nvl(null, 1234) dual-დან;

შეკითხვა 3: აირჩიეთ nvl(substr('abc', 4), 'ქვესტრიქონი არ არსებობს') dual-დან;

ვინაიდან NVL ფუნქცია მოითხოვს ორ პარამეტრს, მოთხოვნა 1 დააბრუნებს ORA-00909: არასწორი რაოდენობის არგუმენტების შეცდომას. მოთხოვნა 2 დააბრუნებს 1234-ს, რადგან NULL მოწმდება და ის არის NULL. შეკითხვა მესამე იყენებს ჩადგმულ SUBSTR ფუნქციას, რომელიც ცდილობს ამოიღოს მეოთხე სიმბოლო სამი სიმბოლოს სტრიქონიდან, აბრუნებს NULL-ს, ხოლო NVL ფუნქცია აბრუნებს სტრიქონს „არ არსებობს sbusstring“.

NVL ფუნქცია ძალიან სასარგებლოა ციფრებთან მუშაობისას. იგი გამოიყენება NULL მნიშვნელობების 0-ზე გადასაყვანად ისე, რომ არითმეტიკული მოქმედებებიმეტი რიცხვი არ დააბრუნა NULL

NVL ფუნქცია2

NVL2 ფუნქცია უზრუნველყოფს უფრო მეტ ფუნქციონირებას, ვიდრე NVL, მაგრამ ასევე ამუშავებს NULL-ს. ის ამოწმებს სვეტის ან ნებისმიერი ტიპის გამოხატვის მნიშვნელობას ნულოვანი მნიშვნელობისთვის. თუ მნიშვნელობა არ არის NULL, მაშინ ბრუნდება მეორე პარამეტრი, წინააღმდეგ შემთხვევაში ბრუნდება მესამე პარამეტრი, განსხვავებით NVL ფუნქციისგან, რომელიც ამ შემთხვევაში აბრუნებს თავდაპირველ მნიშვნელობას.

NVL2 ფუნქციას აქვს სამი საჭირო პარამეტრი და სინტაქსია NVL2 (ორიგინალი, ifnotnull, ifnull), სადაც ორიგინალი არის შესამოწმებელი მნიშვნელობა, ifnotnull არის დასაბრუნებელი მნიშვნელობა, თუ ორიგინალი არ არის NULL, და ifnull არის მნიშვნელობა, რომელიც უნდა დაბრუნდეს, თუ ორიგინალი არის NULL. ifnotnull და ifnull პარამეტრების მონაცემთა ტიპები უნდა იყოს თავსებადი და ისინი არ შეიძლება იყოს LONG ტიპის. NVL2 ფუნქციით დაბრუნებული მონაცემთა ტიპი უდრის ifnotnull პარამეტრის მონაცემთა ტიპს. მოდით შევხედოთ რამდენიმე მაგალითს

შეკითხვა 1: აირჩიეთ nvl2(1234, 1, 'სტრიქონი') ორმაგიდან;

შეკითხვა 2: აირჩიეთ nvl2(null, 1234, 5678) ორმაგიდან;

შეკითხვა 3: აირჩიეთ nvl2(substr('abc', 2), 'Not bc', 'No substring') dual-დან;

ifnotnull პარამეტრი მოთხოვნაში 1 არის რიცხვი, ხოლო ifnull პარამეტრი არის სტრიქონი. ვინაიდან მონაცემთა ტიპები შეუთავსებელია, დაბრუნდა შეცდომა „ORA-01722: არასწორი ნომერი“. შეკითხვა მეორე აბრუნებს ifnull პარამეტრს, რადგან ორიგინალი არის NULL და შედეგი არის 5678. შეკითხვა მესამე იყენებს SUBSTR ფუნქციას, რომელიც აბრუნებს 'bc' და იძახებს NVL2 ('bc', 'Not bc', 'No substring') - რომელიც აბრუნებს ifnotnull-ს. პარამეტრი - "არა bc".

NULLIF ფუნქცია

NULLIF ფუნქცია ამოწმებს ერთსა და იმავე ორ მნიშვნელობას. თუ ისინი იგივეა, NULL ბრუნდება, წინააღმდეგ შემთხვევაში, პირველი პარამეტრი დაბრუნდება. NULLIF ფუნქციას აქვს ორი საჭირო პარამეტრი და სინტაქსი არის NULLIF(ifunequal, krahasim_item). ფუნქცია ადარებს ორ პარამეტრს და თუ ისინი იდენტურია, აბრუნებს NULL-ს, წინააღმდეგ შემთხვევაში არათანაბარ პარამეტრს. განიხილეთ მოთხოვნები

შეკითხვა 1: აირჩიეთ nullif(1234, 1234) dual-დან;

პირველი შეკითხვა აბრუნებს NULL-ს, რადგან პარამეტრები იდენტურია. მოთხოვნა 2-ში სტრიქონები არ გარდაიქმნება თარიღად, მაგრამ შედარებულია როგორც სტრიქონები. ვინაიდან სტრიქონები სხვადასხვა სიგრძისაა, უთანასწორო 24-JUL-2009 პარამეტრი ბრუნდება.

სურათზე 10-4, NULLIF ფუნქცია მოთავსებულია NVL2 ფუნქციის ფარგლებში. NULLIF ფუნქცია თავის მხრივ იყენებს SUBSTR და UPPER ფუნქციებს, როგორც გამოხატვის ნაწილს ifunequal პარამეტრში. EMAIL სვეტი შედარებულია ამ გამონათქვამთან, რომელიც აბრუნებს სახელის პირველ ასოს გვართან მიბმული თანამშრომლებისთვის, რომელთა სახელი 4 სიმბოლოს შეადგენს. როდესაც ეს მნიშვნელობები ტოლია, NULLIF დააბრუნებს NULL-ს, წინააღმდეგ შემთხვევაში დააბრუნებს არათანაბარი პარამეტრის მნიშვნელობას. ეს მნიშვნელობები გამოიყენება როგორც პარამეტრი NVL2 ფუნქციისთვის. NVL2, თავის მხრივ, აბრუნებს აღწერას, ემთხვევა თუ არა შედარებული ელემენტები.

სურათი 10-4 - NULLIF ფუნქციის გამოყენება

COALESCE ფუნქცია

COALESCE ფუნქცია აბრუნებს პირველ არა-NULL მნიშვნელობას პარამეტრების სიიდან. თუ ყველა პარამეტრი არის NULL, მაშინ NULL ბრუნდება. COALESCE ფუნქციას აქვს ორი საჭირო პარამეტრი და ნებისმიერი რაოდენობის სურვილისამებრ პარამეტრი, და სინტაქსი COALESCE(expr1, expr2, ..., exprn), სადაც შედეგი არის expr1, თუ expr 1-ის მნიშვნელობა არ არის NULL, წინააღმდეგ შემთხვევაში შედეგი არის expr2, თუ ეს არ არის NULL და ა.შ. COALESCE მნიშვნელობით უდრის ჩადგმულ NVL ფუნქციებს

COALESCE(expr1, expr2) = NVL(expr1, expr2)

COALESCE(expr1, expr2, expr3) = NVL(expr1,NVL(expr2, expr3))

დაბრუნებული მნიშვნელობის მონაცემთა ტიპი, თუ აღმოჩენილია არა-NULL მნიშვნელობა, უდრის პირველი არა-NULL მნიშვნელობის მონაცემთა ტიპს. „ORA-00932: მონაცემთა არათანმიმდევრული ტიპების“ შეცდომის თავიდან ასაცილებლად, ყველა არა-NULL პარამეტრი უნდა შეესაბამებოდეს პირველ არა-NULL პარამეტრს. განვიხილოთ სამი მაგალითი

შეკითხვა 1: აირჩიეთ coalesce(null, null, null, 'a string') dual-დან;

შეკითხვა 2: აირჩიეთ coalesce(null, null, null) dual-დან;

შეკითხვა 3: აირჩიეთ coalesce(substr('abc', 4), 'Not bc', 'No substring') dual-დან;

შეკითხვა 1 აბრუნებს მეოთხე პარამეტრს: სტრიქონს, რადგან ის არის პირველი არა NULL პარამეტრი. შეკითხვა ორი აბრუნებს NULL-ს, რადგან ყველა პარამეტრი არის NULL. შეკითხვა 3 აფასებს პირველ პარამეტრს, იღებს NULL და აბრუნებს მეორე პარამეტრს, რადგან ის არის პირველი არა NULL პარამეტრი.

NVL2 ფუნქციის პარამეტრები შეიძლება დამაბნეველი იყოს, თუ უკვე იცნობთ NVL ფუნქციას. NVL (ორიგინალი, ifnull) აბრუნებს ორიგინალს, თუ მნიშვნელობა არ არის NULL, წინააღმდეგ შემთხვევაში, ifnull. NVL2 (ორიგინალი, ifnotnull, ifnull) აბრუნებს ifnotnull-ს, თუ ორიგინალი არ არის null, წინააღმდეგ შემთხვევაში ifnull. დაბნეულობა მოდის იქიდან, რომ NVL ფუნქციის მეორე პარამეტრი არის ifnull, ხოლო NVL2 აქვს ifnotnull. ასე რომ, არ დაეყრდნოთ პარამეტრის პოზიციას ფუნქციაში.

დეკო ფუნქცია

DECODE ფუნქცია ახორციელებს if-then-else ლოგიკას პირველი ორი პარამეტრის ტოლობის შემოწმებით და მესამე მნიშვნელობის დაბრუნებით, თუ ისინი ტოლია, ან სხვა მნიშვნელობა, თუ არა. DECODE ფუნქციას აქვს სამი საჭირო პარამეტრი და სინტაქსია DECODE(expr1, comp1, iftrue1, , ). ეს პარამეტრები გამოიყენება როგორც ნაჩვენებია ფსევდოკოდის შემდეგ მაგალითში.

IF expr1=comp1 დააბრუნე iftrue1

სხვა შემთხვევაში, თუ expr1=comp2, მაშინ დააბრუნეთ iftrue2

სხვა შემთხვევაში, თუ exprN=compN, მაშინ დააბრუნეთ iftrueN

სხვა შემთხვევაში დაბრუნება NULL|iffalse;

პირველი, expr1 შედარებულია comp1-თან. თუ ისინი ტოლია, iftrue1 ბრუნდება. თუ expr1 არ არის comp1-ის ტოლი, მაშინ რა მოხდება შემდეგ დამოკიდებულია იმაზე, არის თუ არა მითითებული პარამეტრები comp2 და iftrue2. თუ მოცემულია, მაშინ expr1-ის მნიშვნელობა შედარებულია comp2-თან. თუ მნიშვნელობები ტოლია, მაშინ iftrue2 ბრუნდება. თუ არა, მაშინ თუ არსებობს compN, iftrueN პარამეტრის წყვილები, expr1 და compN შედარებულია და თუ trueა, iftrueN ბრუნდება თუ ტოლია. თუ არცერთ პარამეტრში არ მოიძებნა შესატყვისი, მაშინ ან iffalse ბრუნდება, თუ ეს პარამეტრი იყო მითითებული, ან NULL.

DECODE ფუნქციის ყველა პარამეტრი შეიძლება იყოს გამოხატულება. დაბრუნებული მნიშვნელობის ტიპი უდრის პირველი ვალიდატორის - პარამეტრსკომპ 1. გამოთქმა expr 1 ირიბად გარდაქმნის კომპ პარამეტრის მონაცემთა ტიპად1. კომპის ყველა სხვა ვარიანტი ხელმისაწვდომია 1 … კომპN ასევე ირიბად გარდაიქმნება კომპის ტიპად 1. DECODE განიხილავს NULL მნიშვნელობას, როგორც სხვა NULL მნიშვნელობის ტოლს, ე.ი. თუ expr1 არის NULL და comp3 არის NULL და comp2 არ არის NULL, მაშინ iftrue3 დაბრუნდება. მოდით შევხედოთ რამდენიმე მაგალითს

შეკითხვა 1: აირჩიეთ decode(1234, 123, '123 არის შესატყვისი') ორმაგიდან;

შეკითხვა 2: აირჩიეთ decode(1234, 123, '123 არის შესატყვისი', 'არ ემთხვევა') ორმაგიდან;

შეკითხვა 3: აირჩიეთ decode('ძებნა', 'comp1', 'true1', 'comp2', 'true2', 'ძებნა', 'true3', substr('2search', 2, 6), 'true4', ' false') დუალიდან;

პირველი შეკითხვა ადარებს მნიშვნელობებს 1234 და 123. ვინაიდან ისინი არ არიან ტოლები, iftrue1 იგნორირებულია და რადგან iffalse არ არის განსაზღვრული, NULL ბრუნდება. შეკითხვა მეორე იდენტურია მოთხოვნის 1-ის გარდა იმისა, რომ iffalse მნიშვნელობა არის განსაზღვრული. ვინაიდან 1234 არ არის 123-ის ტოლი, ტყუილად - 'შემთხვევა არ არის' ბრუნდება. შეკითხვა მესამე ამოწმებს პარამეტრის მნიშვნელობებს საძიებო მნიშვნელობის წინააღმდეგ. პარამეტრები comp1 და comp2 არ არის "ძიების" ტოლი, ამიტომ iftrue1 და iftrue2 შედეგები გამოტოვებულია. დამთხვევა გვხვდება მესამე comp3 ელემენტის შედარების ოპერაციაში (პარამეტრის პოზიცია 6) და iftrue3-ის დაბრუნების მნიშვნელობა (პარამეტრი 7) არის 'true3'. მას შემდეგ, რაც მატჩი მოიძებნა, აღარ კეთდება გამოთვლები. ანუ, იმისდა მიუხედავად, რომ comp4-ის მნიშვნელობა (პარამეტრი 8) ასევე ემთხვევა expr1-ს, ეს გამონათქვამი არასოდეს ფასდება, რადგან დამთხვევა ნაპოვნი იქნა წინა შედარებაში.

CASE გამოხატულება

ყველა მესამე და მეოთხე თაობის პროგრამირების ენა ახორციელებს ქეისის კონსტრუქციას. DECODE ფუნქციის მსგავსად, CASE გამოხატულება საშუალებას გაძლევთ განახორციელოთ თუ-მაშინ-სხვა ლოგიკა. CASE გამოხატვის გამოყენების ორი ვარიანტი არსებობს. მარტივი CASE განცხადება ადგენს წყაროს ელემენტის შედარებას ერთხელ და შემდეგ ჩამოთვლის ყველა საჭირო ტესტის პირობას. რთული (მოძიებული) CASE აფასებს ორივე განცხადებას თითოეული პირობისთვის.

CASE გამოხატულებას აქვს სამი საჭირო პარამეტრი. გამოხატვის სინტაქსი დამოკიდებულია ტიპზე. მარტივი CASE გამოხატვისთვის ეს ასე გამოიყურება

CASE search_expr

როდესაც შედარებით_expr1, მაშინ iftrue1

)

TRUNC ფუნქცია აბრუნებს რიცხვს n შეკვეცილს m ათობითი ადგილებში. m პარამეტრი შეიძლება გამოტოვდეს, ამ შემთხვევაში n იკვეთება მთელ რიცხვზე.

SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

DUAL-დან

SIGN(n) ფუნქცია

SIGN ფუნქცია განსაზღვრავს რიცხვის ნიშანს. თუ n დადებითია, მაშინ ფუნქცია აბრუნებს 1-ს. თუ უარყოფითია -1. თუ ის არის ნული, მაშინ ბრუნდება 0. მაგალითად:

SELECT SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

DUAL-დან

ამ ფუნქციის საინტერესო თვისებაა m ნულის ტოლი გადაცემის შესაძლებლობა - ამ შემთხვევაში არ არის გაყოფა 0-ზე.

POWER(n, m) ფუნქცია

POWER ფუნქცია ზრდის n რიცხვს m ხარისხამდე. ხარისხი შეიძლება იყოს წილადი და უარყოფითი, რაც მნიშვნელოვნად აფართოებს ამ ფუნქციის შესაძლებლობებს.

SELECT POWER(10, 2) X1, POWER(100, 1/2) X2,

POWER(1000, 1/3) X3, POWER(1000, -1/3) X4

DUAL-დან

X1 X2 X3 X4
100 10 10 0,1

ზოგიერთ შემთხვევაში, გამონაკლისი შეიძლება მოხდეს ამ ფუნქციის გამოძახებისას. Მაგალითად:

SELECT POWER(-100, 1/2) X2

DUAL-დან

IN ამ საქმესმცდელობა ხდება უარყოფითი რიცხვის კვადრატული ფესვის გამოთვლა, რაც გამოიწვევს ORA-01428 „არგუმენტი დიაპაზონის გარეთ“ შეცდომას.

ფუნქცია SQRT(n)

ეს ფუნქციაბრუნდება Კვადრატული ფესვინომრიდან n. Მაგალითად:

აირჩიეთ SQRT(100) X

DUAL-დან

EXP(n) და LN(n) ფუნქციები

EXP ფუნქცია ზრდის e-ს n-ის ხარისხამდე, ხოლო LN ფუნქცია ითვლის n-ის ბუნებრივ ლოგარითმს (n-ით უნდა იყოს ნულზე მეტი). მაგალითი:

აირჩიეთ EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

TO_CHAR ფუნქცია რიცხვებით

ფუნქციები მონაცემთა სხვა მონაცემთა ტიპებად გადაქცევისთვის. TO_CHAR(ნომერი) აქცევს რიცხვს ტექსტად. TO_NUMBER(სტრიქონი) აკონვერტებს ტექსტს რიცხვად.

SELECT TO_CHAR (123) FROM DUAL დააბრუნებს სტრიქონს 123, SELECT TO_NUMBER (`12345") FROM DUAL დააბრუნებს ნომერს 12345.

ლაბორატორიული სამუშაო. გამომავალი ნომრების ფორმატის შეცვლა

რიცხვითი ფორმატის ცვლილებები Oracle SQL, TO_CHAR ფუნქცია ციფრულ მნიშვნელობებთან მუშაობისთვის.

Ამოცანა:

დაწერეთ მოთხოვნა, რომელიც აჩვენებს ინფორმაციას თანამშრომლების სახელის, გვარისა და ხელფასის შესახებ hr.employees ცხრილიდან ნახაზი 1-ში ნაჩვენები ფორმატით. 3.4-1:

ბრინჯი. 3.4 -1

ამასთან, მონაცემები ისე უნდა იყოს დალაგებული, რომ პირველ რიგში გამოჩნდეს ყველაზე მაღალი ხელფასის მქონე თანამშრომლების რიგები.

Შენიშვნა:

ზოგიერთი ხელფასის ღირებულება ნახ. 3.4-1 შეიცვალა, ამიტომ ისინი შეიძლება არ ემთხვეოდეს თქვენს მნიშვნელობებს.

გამოსავალი:

აირჩიეთ სახელი, როგორც "სახელი", გვარი, როგორც "გვარი", TO_CHAR(ხელფასი, "L999999999.99") როგორც "ხელფასი" FROM hr.employees შეკვეთა ხელფასის მიხედვით DESC.

TO_NUMBER და TO_DATE ფუნქციები

სტრიქონის გადაქცევის ფუნქცია TO_DATE (სტრიქონი, ფორმატი). ფორმატის შესაძლო მნიშვნელობები უკვე განვიხილეთ ზემოთ, ამიტომ მე მივცემ ამ ფუნქციის გამოყენების რამდენიმე მაგალითს. მაგალითები:

აირჩიეთ TO_DATE ("01/01/2010", `DD.MM.YYYY") FROM DUAL დააბრუნებს თარიღს `01.01.2010“;

აირჩიეთ TO_DATE ("01.იან.2010", `DD.MON.YYYY") FROM DUAL დააბრუნებს თარიღს `01.01.2009“;

აირჩიეთ TO_DATE ("15-01-10", `DD-MM-YY") FROM DUAL დააბრუნებს თარიღს `01/15/2010.

ფუნქცია, რომელიც გარდაქმნის სტრიქონს ციფრულ მნიშვნელობად TO_NUMBER (სტრიქონი, ფორმატი). ყველაზე გავრცელებული ფორმატის მნიშვნელობები ჩამოთვლილია ცხრილში, ასე რომ, მოდით განვიხილოთ ამ ფუნქციის გამოყენება მაგალითების გამოყენებით. მაგალითები:

აირჩიეთ TO_NUMBER ('100") FROM DUAL დააბრუნებს ნომერს 100 SELECT TO_NUMBER(`0010.01", "9999D99") FROM DUAL დააბრუნებს ნომერს 10.01;

აირჩიეთ TO_NUMBER ("500,000", "999G999") FROM DUAL დააბრუნებს ნომერს 500000.

RR ელემენტი თარიღის ფორმატში

RR თარიღისა და დროის ფორმატის ელემენტი მსგავსია YY თარიღისა და დროის ფორმატის ელემენტისა, მაგრამ ის უზრუნველყოფს დამატებით მოქნილობას სხვა საუკუნეებში თარიღის მნიშვნელობების შესანახად. RR datetime ფორმატის ელემენტი საშუალებას გაძლევთ შეინახოთ მე-20 საუკუნის თარიღები 21-ე საუკუნეში წლის მხოლოდ ბოლო ორი ციფრის მითითებით.

თუ მიმდინარე წლის ბოლო ორი ციფრი არის 00-დან 49-მდე, მაშინ დაბრუნებულ წელს აქვს იგივე პირველი ორი ციფრი, რაც მიმდინარე წელს.

თუ მიმდინარე წლის ბოლო ორი ციფრი არის 50-დან 99-მდე, მაშინ დაბრუნებული წლის პირველი 2 ციფრი 1-ით მეტია მიმდინარე წლის პირველ 2 ციფრზე.

თუ მიმდინარე წლის ბოლო ორი ციფრი არის 00-დან 49-მდე, მაშინ დაბრუნებული წლის პირველი 2 ციფრი 1-ით ნაკლებია მიმდინარე წლის პირველ 2 ციფრზე.

თუ მიმდინარე წლის ბოლო ორი ციფრი არის 50-დან 99-მდე, მაშინ დაბრუნებულ წელს აქვს იგივე პირველი ორი ციფრი, რაც მიმდინარე წელს.

NVL ფუნქცია

NVL ფუნქცია ზოგადად ყველაზე ხშირად გამოიყენება. ფუნქცია იღებს ორ პარამეტრს: NVL(expr1, expr2). თუ პირველი პარამეტრი expr1 არ არის NULL, მაშინ ფუნქცია აბრუნებს მის მნიშვნელობას. თუ პირველი პარამეტრი არის NULL, მაშინ ფუნქცია აბრუნებს მეორე პარამეტრის მნიშვნელობას exp2.

მაგალითი: აირჩიეთ NVL (მიმწოდებლის_ქალაქი, n/a") მომწოდებლებიდან:

ზემოთ მოყვანილ SQL განცხადებაში ის დააბრუნებს n/"-ს, თუ მიმწოდებლის_ქალაქის ველი შეიცავს null მნიშვნელობას. წინააღმდეგ შემთხვევაში, ის დააბრუნებს მიმწოდებლის_ქალაქის მნიშვნელობას.

Oracle/PLSQL-ში NVL ფუნქციის გამოყენების კიდევ ერთი მაგალითია:

აირჩიეთ მომწოდებლების_ID, NVL (supplier_desc, provider_name) მომწოდებლებიდან.

ეს SQL განცხადება დაბრუნდება მომწოდებლის_სახელიველი თუ მომწოდებელი_აღმომშეიცავს null მნიშვნელობას. წინააღმდეგ შემთხვევაში ის დაბრუნდება მომწოდებელი_აღმომ.

ბოლო მაგალითი: Oracle/PLSQL-ში NVL ფუნქციის გამოყენება არის: გაყიდვებიდან აირჩიეთ NVL(კომისია, 0);

ამ SQL განცხადებამ დააბრუნა მნიშვნელობა 0 if კომისიაველი შეიცავს null მნიშვნელობას. წინააღმდეგ შემთხვევაში, დაბრუნდებოდა კომისიებიველი.

NVL ტრანსფორმაციები მონაცემთა სხვადასხვა ტიპებისთვის

განუსაზღვრელი მნიშვნელობის რეალურ მნიშვნელობად გადასაყვანად გამოიყენეთ NVL ფუნქცია: NVL ( გამოხატულება1, გამოხატულება2), სადაც:

გამოხატულება 1 -ორიგინალური ან გამოთვლილი მნიშვნელობა, რომელიც შეიძლება იყოს ნულოვანი.

გამოხატულება2- მნიშვნელობა, რომელიც ჩანაცვლებულია null მნიშვნელობით.

Შენიშვნა: NVL ფუნქცია შეიძლება გამოყენებულ იქნას ნებისმიერი ტიპის მონაცემთა კონვერტაციისთვის, მაგრამ შედეგი ყოველთვის იქნება იგივე ტიპი, როგორც გამოხატულება 1.

NVL კონვერტაცია სხვადასხვა ტიპისთვის:

NUMBER-NVL (რიცხვითი სვეტი, 9).

CHAR ან VARCHAR2 - NVL (სიმბოლოები|სვეტი,"ხელმისაწვდომია").

ლაბორატორიული სამუშაო. NVL ფუნქციის გამოყენება

NVL ფუნქცია Oracle SQL-ში ნულოვანი მნიშვნელობების დასამუშავებლად.

Ამოცანა:

დაწერეთ მოთხოვნა, რომელიც აჩვენებს ინფორმაციას თანამშრომლების სახელებისა და გვარების შესახებ hr.employees. ცხრილიდან, ასევე საკომისიოს განაკვეთს (სვეტი COMMISSION_PCT) თანამშრომლისთვის. ამ შემთხვევაში, იმ თანამშრომლებისთვის, ვისთვისაც საკომისიო არ არის განსაზღვრული, თქვენ უნდა აჩვენოთ მნიშვნელობა 0. მოთხოვნის შედეგი უნდა იყოს იგივე, რაც ნაჩვენებია ნახ. 3.5-1.

ბრინჯი. 3.5 -1 (მნიშვნელობები ნაჩვენებია 51-ე სტრიქონიდან დაწყებული)

გამოსავალი:

შესაბამისი მოთხოვნის კოდი შეიძლება ასე გამოიყურებოდეს:

აირჩიეთ first_name AS "First Name", last_name როგორც "Last Name", NVL (COMMISSION_PCT, 0) როგორც "Commission Rate" FROM hr.employees.

NVL ფუნქცია

NVL ფუნქცია ზოგადად ყველაზე ხშირად გამოიყენება. ფუნქცია იღებს ორ პარამეტრს: NVL(expr1, expr2). თუ პირველი პარამეტრი expr1 არ არის NULL, მაშინ ფუნქცია აბრუნებს მის მნიშვნელობას. თუ პირველი პარამეტრი არის NULL, მაშინ ფუნქცია აბრუნებს მეორე პარამეტრის მნიშვნელობას expr2.

განიხილეთ პრაქტიკული მაგალითი. EMP ცხრილის COMM ველი შეიძლება შეიცავდეს NULL მნიშვნელობებს. შეკითხვის შესრულებისას, როგორიცაა:

აირჩიეთ EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

SCOTT.EMP-დან

NULL მნიშვნელობა შეიცვლება ნულით. გაითვალისწინეთ, რომ თუ მნიშვნელობა გენერირებულია ფუნქციის გამოყენებით, მას ენიჭება მეტსახელი. შეკითხვის შედეგები ასე გამოიყურება:

EMPNO ENAME COMM NVL_COMM
7369 სმიტი 0
7499 ალენ 300 300
7521 WARD 500 500
7566 ჯონსი 0
7654 მარტინი 1400 1400
7698 ბლეიკი 0
7782 კლარკი 0
7839 მეფე 0
7844 TURNER 0 0
7900 ჯეიმსი 0
7902 FORD 0
7934 მილერი 0

CEIL(n) ფუნქცია

CEIL ფუნქცია აბრუნებს პარამეტრად გადაცემულ n რიცხვზე მეტ ან ტოლ რიცხვს. Მაგალითად:

SELECT CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4

DUAL-დან

TRUNC(n[,m])

TRUNC ფუნქცია აბრუნებს რიცხვს n შეკვეცილს m ათობითი ადგილებში. m პარამეტრი შეიძლება გამოტოვდეს, ამ შემთხვევაში n იკვეთება მთელ რიცხვზე.

SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

DUAL-დან

SIGN(n) ფუნქცია

SIGN ფუნქცია განსაზღვრავს რიცხვის ნიშანს. თუ n დადებითია, მაშინ ფუნქცია აბრუნებს 1-ს. თუ უარყოფითია -1. თუ ის არის ნული, მაშინ ბრუნდება 0. მაგალითად:

SELECT SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

DUAL-დან

ამ ფუნქციის საინტერესო თვისებაა m ნულის ტოლი გადაცემის შესაძლებლობა - ამ შემთხვევაში არ არის გაყოფა 0-ზე.

POWER(n, m) ფუნქცია

POWER ფუნქცია ზრდის n რიცხვს m ხარისხამდე. ხარისხი შეიძლება იყოს წილადი და უარყოფითი, რაც მნიშვნელოვნად აფართოებს ამ ფუნქციის შესაძლებლობებს.

SELECT POWER(10, 2) X1, POWER(100, 1/2) X2,

POWER(1000, 1/3) X3, POWER(1000, -1/3) X4

DUAL-დან

X1 X2 X3 X4
100 10 10 0,1

ზოგიერთ შემთხვევაში, გამონაკლისი შეიძლება მოხდეს ამ ფუნქციის გამოძახებისას. Მაგალითად:

SELECT POWER(-100, 1/2) X2

DUAL-დან

ამ შემთხვევაში მცდელობა ხდება უარყოფითი რიცხვის კვადრატული ფესვის გამოთვლა, რაც გამოიწვევს ORA-01428 „არგუმენტი დიაპაზონის გარეთ“ შეცდომას.

ფუნქცია SQRT(n)

ეს ფუნქცია აბრუნებს n-ის კვადრატულ ფესვს. Მაგალითად:

აირჩიეთ SQRT(100) X

DUAL-დან

EXP(n) და LN(n) ფუნქციები

EXP ფუნქცია ზრდის e-ს n-ის ხარისხამდე, ხოლო LN ფუნქცია ითვლის n-ის ბუნებრივ ლოგარითმს (n-ით უნდა იყოს ნულზე მეტი). მაგალითი:

აირჩიეთ EXP(2) X1, LN(1) X2, LN(EXP(2)) X3