Tujuan

Hari ini kita berbicara tentang fungsi. Fungsi di SQL memungkinkan Anda untuk melakukan perbuatan seperti menentukan jumlah dari kolom atau mengubah semua karakter string ke huruf besar.Pada akhir hari, Anda akan memahami dan dapat menggunakan semua hal berikut:

  • Fungsi Agregat
  • Tanggal dan waktu fungsi
  • Fungsi aritmatika
  • Karakter fungsi
  • Fungsi Konversi
  • Miscellaneous fungsi

Fungsi ini sangat meningkatkan kemampuan Anda untuk memanipulasi informasi yang Anda diambil dengan menggunakan fungsi dasar SQL yang dijelaskan sebelumnya minggu ini. Lima pertama fungsi agregat, COUNT, SUM, AVG, MAX, dan MIN, didefinisikan dalam standar ANSI. Kebanyakan implementasi dari SQL memiliki ekstensi fungsi agregat tersebut, beberapa diantaranya meliputi hari ini. Beberapa implementasi dapat menggunakan nama yang berbeda untuk fungsi tersebut.

Fungsi Agregat

Fungsi ini juga disebut sebagai fungsi kelompok. Mereka kembali nilai berdasarkan nilai dalam kolom. (Setelah semua, Anda tidak akan meminta untuk rata-rata contoh field.) Tersebut dalam bagian ini menggunakan TEAMSTATS tabel:

INPUT:
  SQL> SELECT * FROM TEAMSTATS;
OUTPUT:
  NAMA POS HITS AB SINGLES berjalan tiga kali lipat ganda HR SO 
  --------- --- --- ---- ----- ------- ------- ------- - - 
  JONES 1B 145 45 34 31 8 1 5 10 
  DONKNOW 3B 175 65 23 50 10 1 4 15 
  Worley LF 157 49 15 35 8 3 3 16 
  DAVID OF 187 70 24 48 4 0 17 42 
  HAMHOCKER 3B 50 12 10 10 2 0 0 13 
  Casey DH 1 0 0 0 0 0 0 1 

  6 baris yang dipilih. 

COUNT

COUNT kembali fungsi jumlah baris yang memenuhi kondisi di klausa WHERE. Katakanlah Anda ingin tahu berapa banyak pemain memukul bola di bawah 350. Anda akan ketik

INPUT / OUTPUT:
  SQL> SELECT COUNT (*) 
   2 DARI TEAMSTATS 
  3 WHERE HITS / AB <0,35; 

  COUNT (*) 
  -------- 
         4 

Untuk membuat kode lebih mudah dibaca, cobalah alias:

INPUT / OUTPUT:
  SQL> SELECT COUNT (*) NUM_BELOW_350 
  2 DARI TEAMSTATS 
  3 WHERE HITS / AB <0,35; 

  NUM_BELOW_350 
  ------------- 
              4 

Apakah ada bedanya jika Anda mencoba nama kolom bukannya nama bintang? (Perhatikan penggunaan tanda kurung di sekitar kolom ini.) Coba:

INPUT / OUTPUT:
  SQL> SELECT COUNT (NAMA) NUM_BELOW_350 
  2 DARI TEAMSTATS 
  3 WHERE HITS / AB <0,35; 

  NUM_BELOW_350 
  ------------- 
              4 

Jawabannya adalah tidak. NAMA kolom yang Anda pilih tidak terlibat dalam laporan WHERE. Jika Anda menggunakan COUNT tanpa klausa WHERE, ia mengembalikan jumlah record dalam tabel.

INPUT / OUTPUT:
  SQL> SELECT COUNT (*) 
  2 DARI TEAMSTATS; 

   COUNT (*) 
  --------- 
          6 

SUM

SUM tidak hanya itu. Ia mengembalikan jumlah semua nilai dalam kolom. Untuk mengetahui berapa banyak single sudah terkena, jenis

INPUT:
  SQL SELECT SUM> (SINGLES) TOTAL_SINGLES 
    2 DARI TEAMSTATS;
OUTPUT:
  TOTAL_SINGLES 
  ------------- 
            174 

Untuk mendapatkan beberapa jumlah, gunakan

INPUT / OUTPUT:
  SQL SELECT SUM> (SINGLES) TOTAL_SINGLES, SUM (Doubles) TOTAL_DOUBLES, 
  SUM (tiga kali lipat) TOTAL_TRIPLES, SUM (SDM) TOTAL_HR 
   2 DARI TEAMSTATS; 

  TOTAL_SINGLES TOTAL_DOUBLES TOTAL_HR TOTAL_TRIPLES 
  ------------- ------------- ------------- -------- 
            174 32 5 29 

Untuk mengumpulkan informasi yang sama pada semua 300 atau pemain yang lebih baik, jenis

INPUT / OUTPUT:
  SQL SELECT SUM> (SINGLES) TOTAL_SINGLES, SUM (Doubles) TOTAL_DOUBLES, 
  SUM (tiga kali lipat) TOTAL_TRIPLES, SUM (SDM) TOTAL_HR 
    2 DARI TEAMSTATS 
    3 WHERE HITS / AB> = 0,300; 

  TOTAL_SINGLES TOTAL_DOUBLES TOTAL_HR TOTAL_TRIPLES 
  ------------- ------------- ------------- -------- 
            164 30 5 29 

Untuk menghitung rata-rata tim yang memukul, jenis

INPUT / OUTPUT:
  SQL> SELECT SUM (HITS) / SUM (AB) TEAM_AVERAGE 
    2 DARI TEAMSTATS; 

  TEAM_AVERAGE 
  ------------ 
     .33706294 

SUM bekerja hanya dengan angka. Jika anda mencobanya di lapangan nonnumerical, Anda mendapatkan

INPUT / OUTPUT:
  SQL> SELECT SUM (NAMA) 
   2 DARI TEAMSTATS; 

  ERROR: 
  ORA-01722: nomor yang tidak valid 
  ada baris yang dipilih 

Pesan kesalahan ini adalah logis karena Anda tidak dapat jumlah kelompok nama.

AVG

Fungsi AVG menghitung rata-rata kolom. Untuk menemukan jumlah rata-rata out mogok, gunakan ini:

INPUT:
  SQL> SELECT AVG (SO) AVE_STRIKE_OUTS 
   2 DARI TEAMSTATS;
OUTPUT:
  AVE_STRIKE_OUTS 
  --------------- 
        16.166667 

Contoh berikut menggambarkan perbedaan antara SUM dan AVG:

INPUT / OUTPUT:
  SQL> SELECT AVG (HITS / AB) TEAM_AVERAGE 
    2 DARI TEAMSTATS; 

  TEAM_AVERAGE 
  ------------ 
     .26803448 
ANALISIS:

Tim itu memukul lebih dari 300 pada contoh sebelumnya! Apa yang terjadi dihitung? AVG rata-rata dari kolom gabungan hits dibagi dengan pada kelelawar, sedangkan contoh SUM dibagi dengan jumlah hit dengan jumlah pada kelelawar. Sebagai contoh, pemain A mendapatkan 50 hit dalam 100 pada kelelawar untuk sebuah. 500 rata-rata. Player B mendapatkan 0 hit dalam 1 pada kelelawar untuk rata-rata 0,0. Rata-rata 0,0 dan 0,5 adalah 0,250. Jika Anda menghitung rata-rata gabungan dari 50 hits di 101 pada kelelawar, jawabannya adalah 0,495 terhormat. Kembali pernyataan berikut benar batting rata-rata:

INPUT / OUTPUT:
  SQL> SELECT AVG (HITS) / AVG (AB) TEAM_AVERAGE 
   2 DARI TEAMSTATS; 
  TEAM_AVERAGE 
  ------------ 
     .33706294 

Seperti fungsi SUM, AVG bekerja hanya dengan angka.

MAX

Jika Anda ingin mencari nilai terbesar dalam kolom, MAX digunakan. Sebagai contoh, apa adalah jumlah tertinggi hits?

INPUT:
  SQL> SELECT MAX (HITS) 
   2 DARI TEAMSTATS;
OUTPUT:
  MAX (HITS) 
  --------- 
         70 

Dapatkah Anda mencari tahu yang memiliki hits paling?

INPUT / OUTPUT:
  SQL> SELECT NAME 
  2 DARI TEAMSTATS 
  3 WHERE HITS = MAX (HITS); 

  ERROR pada baris 3: 
  ORA-00934: fungsi kelompok tidak diperkenankan di sini 

Sayangnya, Anda tidak bisa. Pesan kesalahan adalah pengingat bahwa fungsi kelompok (ingat bahwa fungsi agregat juga disebut fungsi kelompok) tidak bekerja di klausa WHERE. Jangan putus asa, Hari 7, “Subqueries: The Embedded SELECT Pernyataan,” mencakup konsep subqueries dan menjelaskan cara untuk mencari yang memiliki hits MAX.

Apa yang terjadi jika Anda mencoba kolom nonnumerical?

INPUT / OUTPUT:
  SQL> SELECT MAX (NAMA) 
   2 DARI TEAMSTATS; 
  MAX (NAMA) 
  --------------- 
  Worley 

Ini sesuatu yang baru. MAX kembali yang tertinggi (paling dekat dengan Z) string,. Akhirnya fungsi yang bekerja dengan baik karakter dan angka.

MIN

MIN melakukan hal yang diharapkan dan bekerja seperti MAX kecuali ia mengembalikan anggota terendah kolom. Untuk mengetahui paling sedikit di kelelawar, jenis

INPUT:
  SQL> SELECT MIN (AB) 
    2 DARI TEAMSTATS;
OUTPUT:
  MIN (AB) 
  --------- 
          1 

Kembali pernyataan berikut nama yang paling dekat ke awal abjad:

INPUT / OUTPUT:
  SQL> SELECT MIN (NAMA) 
  2 DARI TEAMSTATS; 

  MIN (NAMA) 
  --------------- 
  Casey 

Anda dapat menggabungkan dengan MIN MAX memberikan rentang nilai. Sebagai contoh:

INPUT / OUTPUT:
  SQL> MIN SELECT (AB), MAX (AB) 
   2 DARI TEAMSTATS; 

   MIN (AB) MAX (AB) 
  -------- -------- 
         1 187 

Informasi semacam ini dapat berguna bila menggunakan fungsi statistik.


CATATAN: Seperti yang telah disebutkan dalam pendahuluan, lima pertama fungsi agregat dijelaskan dalam standar ANSI. Fungsi-fungsi agregat yang tersisa telah menjadi standar de facto, hadir dalam semua implementasi penting dari SQL. Kami menggunakan Oracle7 nama untuk fungsi tersebut. implementasi lain mungkin menggunakan nama yang berbeda.

VARIANS

VARIANS menghasilkan kuadrat dari standar deviasi, nomor penting untuk perhitungan statistik banyak. Cara kerjanya seperti ini:

INPUT:
  SQL> SELECT VARIANS (HITS) 
   2 DARI TEAMSTATS;
OUTPUT:
  
  VARIANS (HITS) 
  -------------- 
       802,96667 

Jika Anda mencoba string

INPUT / OUTPUT:
  SQL> SELECT VARIANS (NAMA) 
  2 DARI TEAMSTATS; 

  ERROR: 
  ORA-01722: nomor yang tidak valid 
  ada baris yang dipilih 

Anda menemukan bahwa VARIANS fungsi lain yang bekerja secara eksklusif dengan angka.

STDDEV

Fungsi kelompok terakhir, STDDEV, menemukan deviasi standar dari kolom angka, seperti yang ditunjukkan oleh contoh ini:

INPUT:
  SQL> SELECT STDDEV (HITS) 
   2 FROM TEAMSTATS;
OUTPUT:
  
  STDDEV (HITS) 
  ------------ 
     28.336666 

Ini juga mengembalikan sebuah kesalahan ketika berhadapan dengan string:

INPUT / OUTPUT:
  SQL> SELECT STDDEV (NAMA) 
  2 DARI TEAMSTATS; 

  ERROR: 
  ORA-01722: nomor yang tidak valid 
  ada baris yang dipilih 

Fungsi-fungsi agregat dapat juga digunakan dalam berbagai kombinasi:

INPUT / OUTPUT:
  SQL> SELECT COUNT (AB), 
   2 AVG (AB), 
    3 MIN (AB), 
    4 MAX (AB), 
   5 STDDEV (AB), 
    6 VARIANS (AB), 
   7 SUM (AB) 
   8 DARI TEAMSTATS; 

  COUNT (AB) AVG (AB) MIN (AB) MAX (AB) STDDEV (AB) VARIANS (AB) SUM (AB) 
  --------- ------- ------- ------- ---------- ---------- - ------- 
  6 187 75,589 119,167 1 5.712 0,97 715 

Lain kali Anda mendengar statistik olah raga menggunakan untuk mengisi waktu antara bermain, Anda akan tahu bahwa SQL sedang bekerja di balik layar.

Fungsi Tanggal dan Waktu

Kita hidup dalam peradaban diatur oleh waktu dan tanggal, dan utama sebagian besar implementasi dari SQL memiliki fungsi untuk mengatasi konsep-konsep ini. Bagian ini menggunakan mejaPROYEK untuk menunjukkan fungsi waktu dan tanggal.

INPUT:
  SQL> SELECT * FROM PROJECT;
OUTPUT:
  
  TUGAS STARTDATE ENDDATE 
  -------------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 
  SURVEY TECH 02-April-95 01-MEI-95 
  PENGGUNA MTGS 15-MUNGKIN-95 30-MEI-95 
  DESIGN widget 01-Juni-95 30-Juni-95 
  Kode Widget 01-Juli-95 02-September-95 
  PENGUJIAN 03-September-95 17-JAN-96 
  6 baris yang dipilih. 

CATATAN: Tabel ini digunakan tipe data Date, Paling. implementasi dari SQL memiliki data Tanggal jenis tetapi sintaks yang tepat dapat bervariasi.

ADD_MONTHS

Fungsi ini menambah beberapa bulan ke tanggal tertentu. Sebagai contoh, katakanlah sesuatu yang luar biasa terjadi, dan proyek sebelumnya tergelincir ke kanan oleh dua bulan. Anda bisa membuat jadwal baru dengan mengetikkan

INPUT:
  SQL> SELECT TUGAS, 
   2 STARTDATE, 
  3 ENDDATE ORIGINAL_END, 
  4 ADD_MONTHS (ENDDATE, 2) 
   5 DARI PROYEK;
OUTPUT:
  TUGAS STARTDATE ORIGINAL_ ADD_MONTH 
  -------------- --------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 01-Juni-95 
  SURVEY TECH 02-April-95 01-May-95 01-Juli-95 
  PENGGUNA MTGS 15-MUNGKIN-95 30-May-95 30-Juli-95 
  DESIGN widget 01-Juni-95 30-Juni-95 31-Agustus-95 
  Kode Widget 01-Juli-95 02-September-95 02-November-95 
  PENGUJIAN 03-September-95 17-JAN-96 17-MAR-96 

  6 baris yang dipilih. 

Bukan berarti slip seperti ini adalah mungkin, tapi itu baik untuk memiliki fungsi yang membuatnya begitu mudah. ADD_MONTHS juga bekerja di luar klausa SELECT. Ketikan

INPUT:
  SQL> SELECT TUGAS TASKS_SHORTER_THAN_ONE_MONTH 
  2 DARI PROYEK 
   3 WHERE ADD_MONTHS (STARTDATE, 1)> ENDDATE; 

menghasilkan hasil sebagai berikut:

OUTPUT:
  TASKS_SHORTER_THAN_ONE_MONTH 
  ---------------------------- 
  Kickoff MTG 
  TECH SURVEY 
  PENGGUNA MTGS 
  DESAIN widget 
ANALISIS:

Anda akan menemukan bahwa semua fungsi dalam bagian ini bekerja di lebih dari satu tempat. Namun, ADD BULAN tidak bekerja dengan tipe data lain seperti karakter atau nomor tanpa bantuan fungsi TO_CHAR dan TO_DATE, yang akan dibahas nanti.

LAST_DAY

LAST_DAY mengembalikan hari terakhir dari bulan tertentu. Ini adalah bagi kita yang belum menguasai “Tiga puluh hari telah September …” sajak – atau setidaknya mereka yang belum mengajarkannya kepada komputer kita. Jika, misalnya, Anda perlu tahu apa yang pada hari terakhir dari bulan tersebut di kolom ENDDATE, Anda akan ketik

INPUT:
  SQL> SELECT ENDDATE, LAST_DAY (ENDDATE) 
    2 DARI PROYEK; 

Berikut hasilnya:

OUTPUT:
  ENDDATE LAST_DAY (ENDDATE) 
  --------- ----------------- 
  01-April-95 30-April-95 
  01-MEI-95 31-MEI-95 
  30-MEI-95 31-MEI-95 
  30-Juni-95 30-Juni-95 
  02-September-95 30-September-95 
  17-JAN-96 31-JAN-96 
  6 baris yang dipilih. 

Bagaimana menangani HARI TERAKHIR tahun kabisat?

INPUT / OUTPUT:
  SQL> SELECT LAST_DAY ('1-Februari-95 ') NON_LEAP, 
    2 LAST_DAY ('1-Februari-96 ') LEAP 
   3 DARI PROYEK; 

  NON_LEAP LEAP 
  --------- --------- 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  6 baris yang dipilih. 
ANALISIS:

Anda mendapatkan hasil yang tepat, tapi mengapa begitu banyak baris kembali? Karena Anda tidak menentukan kolom yang ada atau kondisi, mesin SQL menerapkan fungsi tanggal dalam pernyataan untuk setiap baris yang ada. Mari kita mendapatkan sesuatu yang kurang berlebihan dengan menggunakan berikut:

INPUT:
  SQL> SELECT LAST_DAY berbeda ('1-Februari-95 ') NON_LEAP, 
   2 LAST_DAY ('1-Februari-96 ') LEAP 
    3 DARI PROYEK; 

Pernyataan ini menggunakan kata yang berbeda (lihat Hari 2, “Pengantar Permintaan: Pernyataan SELECT") untuk memproduksi hasil tunggal

OUTPUT:
  NON_LEAP LEAP 
  --------- --------- 
  28-Februari-95 29-Februari-96 

Tidak seperti saya, fungsi ini tahu siapa yang tahun adalah tahun kabisat. Tapi sebelum Anda percaya Anda sendiri atau keuangan di masa depan perusahaan Anda untuk ini atau fungsi lainnya, memeriksa pelaksanaan Anda!

MONTHS_BETWEEN

Jika Anda perlu tahu berapa bulan jatuh antara bulan x dan y bulan, gunakan MONTHS_BETWEEN seperti ini:

INPUT:
  SQL SELECT TUGAS>, STARTDATE, ENDDATE, MONTHS_BETWEEN (STARTDATE, ENDDATE) 
       MASA 
   2 DARI PROYEK;
OUTPUT:
  TUGAS STARTDATE MASA ENDDATE 
  -------------- --------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 0 
  SURVEY TECH 02-April-95 01-MEI-95 -. 9.677.419 
  PENGGUNA MTGS 15-MUNGKIN-95-30-95 -. MUNGKIN 483.871 
  DESIGN widget 01-Juni-95 30-Juni-95 -. 9354839 
  Kode Widget 01-Juli-95 02-September-95 -2,032258 
  PENGUJIAN 03-September-95 17-JAN-96 -4,451613 
  6 baris terpilih. 

Tunggu sebentar – yang tidak terlihat benar. Coba ini:

INPUT / OUTPUT:
  SQL SELECT TUGAS>, STARTDATE, ENDDATE, 
    2 MONTHS_BETWEEN (ENDDATE, STARTDATE) MASA 
   3 DARI PROYEK; 

  TUGAS STARTDATE MASA ENDDATE 
  -------------- --------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 0 
  SURVEY TECH 02-April-95 01-MEI-95 ,96774194 
  PENGGUNA MTGS 15-MUNGKIN-95 30-MEI-95 ,48387097 
  DESIGN widget 01-Juni-95 30-Juni-95 ,93548387 
  Kode Widget 01-Juli-95 02-September-95 2,0322581 
  PENGUJIAN 03-September-95 17-JAN-96 4,4516129 
  6 baris yang dipilih. 
ANALISIS:

Itu lebih baik. Anda lihat bahwa MONTHS_BETWEEN sensitif dengan cara Anda memesan bulan. bulan negatif tidak mungkin buruk. Sebagai contoh, Anda dapat menggunakan hasil negatif untuk menentukan apakah satu tanggal terjadi sebelum yang lain. Sebagai contoh, pernyataan berikut menunjukkan semua tugas-tugas yang dimulai sebelum 19 Mei 1995:

INPUT:
  SQL> SELECT * 
    2 DARI PROYEK 
   MANA MONTHS_BETWEEN ('19 MUNGKIN 95 '3, STARTDATE)> 0;
OUTPUT:
  TUGAS STARTDATE ENDDATE 
  -------------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 
  SURVEY TECH 02-April-95 01-MEI-95 
  PENGGUNA MTGS 15-MUNGKIN-95 30-MEI-95 

NEW_TIME

Jika Anda perlu menyesuaikan waktu sesuai dengan zona waktu Anda berada, fungsi New_TIME adalah untuk Anda. Berikut adalah zona waktu, Anda dapat digunakan dengan fungsi ini:

Singkatan Wilayah waktu
AST atau ADT Atlantik standar atau daylight
BST atau BDT Bering standar atau daylight
CST atau CDT standar Pusat atau daylight
EST atau EDT standar Timur atau daylight
GMT Berarti waktu Greenwich
HST atau HDT Alaska-Hawaii standar atau daylight
MST atau MDT Gunung standar atau daylight
NST Newfoundland standar waktu
PST atau PDT Pasifik standar atau daylight
YST atau YDT Yukon standar atau daylight

Anda dapat mengatur waktu Anda seperti ini:

INPUT:
  SQL> SELECT EDT ENDDATE, 
   2 NEW_TIME (ENDDATE, 'EDT', 'PDT') 
  3 DARI PROYEK;
OUTPUT:
  NEW_TIME EDT (ENDDATE 
  ---------------- ---------------- 
  01-April-95 1200AM 31-MAR-95 0900PM 
  01-MEI-95 1200AM 30-April-95 0900PM 
  30-MEI-95 1200AM 29-MUNGKIN-95 0900PM 
  30-Juni-95 1200AM 29-Juni-95 0900PM 
  02-September-95 1200AM 01-September-95 0900PM 
  17-JAN-96 16-JAN 1200AM-96 0900PM 
  6 baris yang dipilih. 

Seperti sihir, semua waktu dalam zona waktu yang baru dan tanggal disesuaikan.

NEXT_DAY

NEXT_DAY menemukan nama hari pertama dari minggu yang sama dengan atau lebih dari tanggal yang ditentukan lain. Misalnya, untuk mengirim laporan pada hari Jumat setelah hari pertama setiap peristiwa, Anda akan ketik

INPUT:
  SQL> SELECT STARTDATE, 
  2 NEXT_DAY (STARTDATE, 'Jumat') 
   3 DARI PROYEK; 

yang akan kembali

OUTPUT:
  STARTDATE NEXT_DAY ( 
  --------- --------- 
  01-April-95 07-April-95 
  02-April-95 07-April-95 
  15-MEI-95 19-MEI-95 
  01-Juni-95 02-Juni-95 
  01-Juli-95 07-Juli-95 
  03-September-95 08-September-95 
  6 baris yang dipilih. 
ANALISIS:

Output memberitahu Anda tanggal Jumat pertama yang terjadi setelah STARTDATE Anda.

SYSDATE

SYSDATE mengembalikan sistem waktu dan tanggal:

INPUT:
  SQL> SELECT berbeda SYSDATE 
  2 DARI PROYEK;
OUTPUT:
  SYSDATE 
  ---------------- 
  18-Juni-95 1020PM 

Jika Anda ingin melihat di mana Anda berdiri saat ini dalam proyek tertentu, Anda bisa mengetik

INPUT / OUTPUT:
  SQL> SELECT * 
   2 DARI PROYEK 
   3 WHERE STARTDATE SYSDATE>; 

  TUGAS STARTDATE ENDDATE 
  -------------- --------- --------- 
  Kode Widget 01-Juli-95 02-September-95 
  PENGUJIAN 03-September-95 17-JAN-96 

Sekarang Anda dapat melihat apa bagian awal proyek setelah hari ini.

Fungsi Aritmatika

Banyak yang Anda miliki untuk menggunakan data Anda mengambil melibatkan matematika. Kebanyakan implementasi dari SQL menyediakan fungsi aritmatika mirip dengan fungsi dibahas di sini.Contoh dalam bagian ini menggunakan ANGKA tabel:

INPUT:
  SQL> SELECT * 
  2 DARI ANGKA;
OUTPUT:
  AB 
  --------- --------- 
     3,1415 4 
        -45 0,707 
          5 9 
    -57,667 42 
         15 55 
       5,3 -7,2 
  6 baris yang dipilih. 

ABS

Fungsi ABS mengembalikan nilai absolut dari nomor yang menunjuk ke. Misalnya:

INPUT:
  SQL> SELECT ABS (A) ABSOLUTE_VALUE 
  2 DARI ANGKA;
OUTPUT:
  ABSOLUTE_VALUE 
  -------------- 
          3,1415 
              45 
               5 
          57,667 
              15 
             7,2 
  6 baris yang dipilih. 

ABS perubahan semua angka negatif ke positif dan daun bilangan positif saja.

Ceil dan LANTAI

Ceil mengembalikan integer terkecil yang lebih besar dari atau sama dengan argumen. LANTAI tidak hanya sebaliknya, mengembalikan integer terbesar sama dengan atau kurang dari argumen.Sebagai contoh:

INPUT:
  SQL> SELECT B, ceil (B) PLAFON 
  2 DARI ANGKA;
OUTPUT:
  B PLAFON 
  --------- --------- 
          4 4 
       0,707 1 
          9 9 
         42 42 
         55 55 
        5,3 6 
  6 baris yang dipilih. 

Dan

INPUT / OUTPUT:
  SQL> SELECT A, LANTAI (A LANTAI) 
   2 DARI ANGKA; 

          A LANTAI 
  --------- --------- 
     3,1415 3 
        -45 -45 
          5 5 
    -57,667 -58 
         15 15 
       -8 -7,2 
  6 baris terpilih. 

COS, biaya murah, SIN, Sinh, TAN, dan TANH

The COS, SIN, dan TAN fungsi memberikan dukungan untuk berbagai konsep trigonometri. Mereka semua bekerja pada asumsi bahwa n adalah dalam radian. Pernyataan berikut kembali beberapa nilai yang tak terduga jika Anda tidak menyadari COS mengharapkan A, yang dalam radian.

INPUT:
  SQL> SELECT A, COS (A) 
   2 ANGKA DARI;
OUTPUT:
  A COS (A) 
  --------- --------- 
     3,1415 -1 
        -45 ,52532199 
          5 .28366219 
    -57,667 0,437183 
         15 -. 7596879 
       ,60835131 -7,2 
ANALISIS:

Anda akan mengharapkan COS dari 45 derajat berada di sekitar 0,707, bukan 0,525. Untuk membuat fungsi ini bekerja dengan cara yang Anda harapkan untuk di dunia berorientasi derajat, Anda perlu mengkonversi derajat ke radian giliran. (Kapan terakhir kali Anda mendengar berita menyiarkan laporan yang telah dilakukan politikus-pi radian sebuah? Anda mendengar tentang derajat berubah 180 radian.) Karena 360 pi = 2 derajat, Anda dapat menulis

INPUT / OUTPUT:
  SQL> SELECT A, COS (A * 0,01745329251994) 
   2 ANGKA DARI; 
  A COS (A * 0,01745329251994) 
  --------- ----------------------- 
     0,99849724 3,1415 
        -45 ,70710678 
          5 .9961947 
    -57,667 0,5348391 
         15 .96592583 
       -7,2 0,9921147 
ANALISIS:

Perhatikan bahwa jumlah 0,01745329251994 adalah radian dibagi dengan derajat. Fungsi trigonometri bekerja sebagai berikut:

INPUT / OUTPUT:
  SQL> SELECT A, COS (A * 0,017453), tongkat pendek (A * 0,017453) 
   2 DARI ANGKA; 
  A COS (A * 0,017453) tongkat pendek (A * 0,017453) 
  --------- --------------- ---------------- 
     1,0015035 0,99849729 3,1415 
        -45 0,70711609 1,3245977 
          5 .99619483 1,00381 
    -57,667 0,53485335 1,5507072 
         15 .96592696 1.0344645 
       -7,2 0,99211497 1,0079058 
  6 baris yang dipilih. 

Dan

INPUT / OUTPUT:
  SQL> SELECT A, SIN (A * 0,017453), Sinh (A * 0,017453) 
   2 ANGKA DARI; 
  A SIN (A * 0,017453) Sinh (A * 0,017453) 
  --------- --------------- ---------------- 
     0,05485607 0,05480113 3,1415 
        -45 -. -. 7.070.975 8.686.535 
          5 .08715429 .0873758 
    -57,667 -1,185197 -. 8449449 
         15 .25881481 .26479569 
       -. -. -7,2 1.253.311 1.259.926 
  6 baris yang dipilih. 

Dan

INPUT / OUTPUT:
  SQL> SELECT A, TAN (A * 0,017453), TANH (A * 0,017453) 
   2 ANGKA DARI; 

          A TAN (A * 0,017453) TANH (A * 0,017453) 
  --------- --------------- ---------------- 
     0,05477372 0,05488361 3,1415 
        -45 -. -. 9.999.737 6.557.867 
          5 .08748719 .08704416 
    -57,667 -1,579769 -. 7642948 
         15 .26794449 .25597369 
       -. -. -7,2 1.263.272 1.250.043 
  6 baris yang dipilih. 

EXP

EXP memungkinkan Anda untuk meningkatkan e (e adalah konstanta matematika yang digunakan dalam berbagai rumus) untuk kekuatan. Berikut adalah cara menaikkan EXP e oleh nilai-nilai dalam kolom A:

INPUT:
  SQL> SELECT A, EXP (A) 
   2 DARI ANGKA;
OUTPUT:
  A EXP (A) 
  --------- --------- 
     3,1415 23,138549 
        -45 2.863E-20 
          5 148,41316 
    -57,667 9.027E-26 
         15 3.269.017,4 
       -7,2 ,00074659 
  6 baris yang dipilih. 

LN dan LOG

Fungsi-fungsi pusat dua pada logaritma. LN mengembalikan logaritma alami argumen. Sebagai contoh:

INPUT:
  SQL> SELECT A, LN (A) 
   2 ANGKA DARI;
OUTPUT:
  ERROR: 
  ORA-01428: argumen '-45' adalah di luar jangkauan 

Apakah kita mengabaikan untuk menyebutkan bahwa argumen itu harus positif? Menulis

INPUT / OUTPUT:
  SQL> SELECT A, LN (ABS (A)) 
   2 DARI ANGKA; 

          Sebuah LN (ABS (A)) 
  --------- ---------- 
     3,1415 1,1447004 
        -45 3,8066625 
          5 1.6094379 
    -57,667 4,0546851 
         15 2.7080502 
       -7,2 1,974081 
  6 baris yang dipilih. 
ANALISIS:

Perhatikan bagaimana Anda dapat menanamkan ABS fungsi bagian dalam panggilan LN,. Mic lain logarith-Fungsi LOG, membutuhkan dua argumen, kembali logaritma dari argumen pertama di dasar kedua. Kembali query berikut logaritma B kolom dalam basis 10.

INPUT / OUTPUT:
  SQL> SELECT B, LOG (B, 10) 
   2 ANGKA DARI; 

            B LOG (B, 10)  
  ----------- --------- 
            4 1.660964 
         0,707 -6,640962 
            9 1.0479516 
           42 .61604832 
           55 .57459287 
          5,3 1,3806894 
  6 baris yang dipilih. 

MOD

Anda telah menemukan MOD sebelumnya. Pada Hari 3, “Ekspresi, Kondisi, dan Operator,” Anda melihat bahwa standar ANSI untuk operator modulo% kadang-kadang diimplementasikan sebagai fungsi MOD. Berikut ini adalah query yang mengembalikan sebuah tabel yang menunjukkan sisa A dibagi oleh B:

INPUT:
  SQL> SELECT A, B, MOD (A, B) 
   2 DARI ANGKA;
OUTPUT:
  AB MOD (A, B) 
  --------- --------- --------- 
     3,1415 4 3,1415 
        0,707 -45 -. 459 
          5 9 5 
    -57,667 -15,667 42 
         15 55 15 
       5,3 -7,2 -1,9 
  6 baris yang dipilih. 

POWER

Untuk meningkatkan satu nomor ke kekuatan lain, gunakan POWER. Dalam fungsi ini argumen pertama adalah pangkat yang kedua:

INPUT:
  SQL> SELECT A, B, POWER (A, B) 
   2 ANGKA DARI;
OUTPUT:
  ERROR: 
  ORA-01428: argumen '-45' adalah di luar jangkauan 
ANALISIS:

Pada pandangan pertama Anda cenderung berpikir bahwa argumen pertama tidak boleh negatif kekuasaan. Bahwa Tapi dapat kesan tidak benar, karena nomor seperti -4 dapat dinaikkan ke. Oleh karena itu, jika nomor pertama dalam fungsi POWER negatif, yang kedua harus integer. Anda dapat bekerja di sekitar masalah ini dengan menggunakan ceil (atau LANTAI):

INPUT:
  SQL> SELECT A, ceil (B), POWER (A, ceil (B)) 
    2 DARI ANGKA;
OUTPUT:
  A ceil (B) POWER (A, ceil (B)) 
  --------- --------- ---------------- 
     97,3976 4 3,1415 
        -45 1 -45 
          5 9 1953125 
    -57,667 42 9.098E 73 
         15 55 64 4.842E 
       -7,2 6 139.314,07 
  6 baris yang dipilih. 

Itu lebih baik!

MASUK

MASUK kembali -1 jika argumen yang kurang dari 0, 0 jika argumen adalah sama dengan 0 dan 1, jika argumen yang lebih besar dari 0, seperti ditunjukkan pada contoh berikut:

INPUT:
  SQL> SELECT A, MASUK (A) 
  2 DARI ANGKA;
OUTPUT:
  A MASUK (A) 
  --------- --------- 
     1 3,1415 
        -45 -1 
          5 1 
    -57,667 -1 
         15 1 
       -7,2 -1 
          0 0 
  7 baris yang dipilih. 

Anda juga dapat menggunakan MASUK dalam klausa WHERE SELECT seperti ini:

INPUT:
  SQL> SELECT A 
   2 DARI ANGKA 
   3 MANA MASUK (A 1 =);
OUTPUT:
  A 
  --------- 
     3,1415 
          5 
         15 

Sqrt

The sqrt mengembalikan fungsi akar kuadrat dari argumen. Karena akar kuadrat dari angka negatif tidak terdefinisi, Anda tidak dapat menggunakan sqrt pada angka negatif.

INPUT / OUTPUT:
  SQL> SELECT A, sqrt (A) 
   2 ANGKA DARI; 
  ERROR: 
  ORA-01428: argumen '-45' adalah di luar jangkauan 

Namun, Anda dapat memperbaiki keterbatasan ini dengan ABS:

INPUT / OUTPUT:
  SQL> SELECT ABS (A), sqrt (ABS (A)) 
   2 ANGKA DARI; 

     ABS (A) sqrt (ABS (A)) 
  ------------ --------- 
     3,1415 1,7724277 
         45 6.7082039 
          5 2.236068 
     57,667 7,5938791 
         15 3.8729833 
        7,2 2,6832816 
          0 0 
  7 baris yang dipilih. 

Fungsi Karakter

Banyak implementasi dari SQL menyediakan fungsi untuk memanipulasi karakter dan string karakter. Bagian ini meliputi fungsi karakter yang paling umum. Contoh dalam bagian ini menggunakanTOKOH tabel.

INPUT / OUTPUT:
  SQL> SELECT * DARI TOKOH; 
  NamaBelakang NamaDepan M KODE 
  --------------- --------------- - --------- 
  Purvis KELLY A 32 
  J CHUCK TAYLOR 67 
  LAURA CHRISTINE C 65 
  Adams bernanah M 87 
  COSTALES Armando A 77 
  KONG UTAMA G 52 
  6 baris yang dipilih. 

CHR

CHR mengembalikan karakter setara jumlah menggunakan sebagai argumen. Karakter itu kembali tergantung pada karakter set database. Untuk contoh ini database diatur ke ASCII. Kolom KODEtermasuk nomor.

INPUT:
  SQL> SELECT KODE, CHR (KODE) 
  2 DARI TOKOH;
OUTPUT:
  KODE CH 
  --------- - 
         32 
         67 C 
         65 A 
         87 W 
         77 M 
         52 4 
  6 baris yang dipilih. 

Ruang sebaliknya 32 menunjukkan bahwa 32 adalah ruang dalam ASCII karakter ditetapkan.

Penggabungan strings

Anda menggunakan setara dengan fungsi ini pada Hari 3, ketika Anda belajar tentang operator. The | simbol | splices dua string bersama-sama, seperti halnya penggabungan strings. Cara kerjanya seperti ini:

INPUT:
  SQL> SELECT penggabungan strings (Nama depan, NamaBelakang) "NAMA PERTAMA DAN TERAKHIR" 
   2 DARI TOKOH;
OUTPUT:
  PERTAMA DAN NAMA LAST 
  ------------------------ 
  KELLY Purvis 
  CHUCK TAYLOR 
  LAURA CHRISTINE 
  Bernanah Adams 
  Armando COSTALES 
  UTAMA KONG 
  6 baris yang dipilih. 
ANALISIS:

Quotation menandai mengelilingi beberapa kata alias PERTAMA DAN TERAKHIR NAMA. Sekali lagi, paling aman untuk memeriksa implementasi Anda untuk melihat apakah hal itu memungkinkan-kata beberapa alias.

Juga perhatikan bahwa meskipun meja terlihat seperti dua kolom terpisah, apa yang Anda lihat merupakan satu kolom. Nilai pertama yang Anda concatenated, Nama depan, adalah 15 karakter lebar. Operasi ini mempertahankan semua karakter di lapangan.

INITCAP

INITCAP mengkapitalisasi huruf pertama kata dan membuat semua karakter huruf kecil lainnya.

INPUT:
  SQL> SELECT NamaDepan SEBELUM, INITCAP (Nama depan) SETELAH 
   2 DARI TOKOH;
OUTPUT:
  SEBELUM SESUDAH 
  ---------- -------------- 
  Kelly Kelly 
  CHUCK Chuck 
  LAURA Laura 
  Membusuk bernanah 
  Armando Armando 
  Mayor UTAMA 
  6 baris yang dipilih. 

LOWER dan UPPER

Seperti yang mungkin Anda harapkan, perubahan BAWAH semua karakter huruf kecil; UPPER tidak hanya sebaliknya.

Contoh berikut ini dimulai dengan melakukan keajaiban kecil dengan fungsi UPDATE (Anda mempelajari lebih lanjut tentang ini minggu depan) untuk mengubah salah satu nilai ke huruf kecil:

INPUT:
  SQL> UPDATE TOKOH 
   2 SET Nama_belakang = 'kelly' 
   3 WHERE Nama depan 'KELLY =';
OUTPUT:
  1 baris diperbarui. 
INPUT:
  SQL> SELECT Nama depan 
   2 DARI TOKOH;
OUTPUT:
  Nama depan 
  --------------- 
  kelly 
  CHUCK 
  LAURA 
  Bernanah 
  Armando 
  UTAMA 
  6 baris yang dipilih. 

Kemudian Anda menulis

INPUT:
  SQL> SELECT Nama depan, UPPER (Nama depan), LOWER (Nama depan) 
    2 DARI TOKOH;
OUTPUT:
  NamaDepan UPPER (Nama depan LOWER (Nama depan 
  --------------- --------------- --------------- 
  KELLY kelly kelly 
  CHUCK CHUCK chuck 
  LAURA LAURA laura 
  Bernanah membusuk bernanah 
  Armando Armando Armando 
  UTAMA UTAMA utama 
  6 baris yang dipilih. 

Sekarang Anda melihat perilaku yang diinginkan.

LPAD dan RPAD

LPAD dan RPAD memakan waktu minimal dua dan maksimal tiga argumen. Argumen pertama adalah string karakter yang harus dioperasi. Yang kedua adalah jumlah karakter untuk pad dengan, dan argumen opsional ketiga adalah karakter untuk pad dengan. Default argumen ketiga kosong, atau bisa menjadi karakter tunggal atau string karakter. Pernyataan berikut menambahkan lima karakter pad, dengan asumsi bahwa bidang NamaBelakang didefinisikan sebagai karakter bidang 15:

INPUT:
  SQL> SELECT NamaBelakang, LPAD (NamaBelakang, 20 ,'*') 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang LPAD (NamaBelakang, 20, '*' 
  -------------- -------------------- 
  Purvis ***** Purvis 
  ***** TAYLOR TAYLOR 
  ***** CHRISTINE CHRISTINE 
  Adams ***** Adams 
  ***** COSTALES COSTALES 
  ***** KONG KONG 
  6 baris yang dipilih. 
ANALISIS:

Mengapa hanya lima karakter pad ditambahkan? Ingatlah bahwa kolom NamaBelakang adalah 15 karakter lebar dan yang NamaBelakang termasuk kosong di sebelah kanan karakter yang membentuk nama. kolom tipe data Beberapa menghilangkan karakter padding jika lebar kolom nilai kurang dari jumlah lebar dialokasikan untuk kolom. Periksa pelaksanaan Anda. Sekarang coba sisi kanan:

INPUT:
  SQL> SELECT NamaBelakang, RPAD (NamaBelakang, 20 ,'*') 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang RPAD (NamaBelakang, 20, '*' 
  -------------------- --------------- 
  Purvis Purvis ***** 
  TAYLOR TAYLOR ***** 
  CHRISTINE CHRISTINE ***** 
  Adams Adams ***** 
  COSTALES COSTALES ***** 
  KONG KONG ***** 
  6 baris yang dipilih. 
ANALISIS:

Di sini Anda melihat bahwa titik-titik yang dianggap sebagai bagian dari nama field untuk operasi ini. Kedua fungsi berikutnya akan sangat berguna dalam situasi semacam ini.

LTRIM dan RTRIM

LTRIM dan RTRIM mengambil minimal satu dan paling banyak dua argumen,. Pertama argumen seperti LPAD dan RPAD, adalah string karakter. Opsional Elemen kedua adalah salah satu karakter atau karakter string atau defaultnya kosong. Jika Anda menggunakan argumen kedua yang tidak kosong, fungsi-fungsi trim akan memangkas karakter bahwa cara yang sama mereka memangkas kosong pada contoh berikut.

INPUT:
  SQL> SELECT NamaBelakang, RTRIM (NamaBelakang) 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang RTRIM (NamaBelakang) 
  --------------- --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE CHRISTINE 
  Adams Adams 
  COSTALES COSTALES 
  KONG KONG 
  6 baris yang dipilih. 

Anda dapat memastikan bahwa karakter yang telah dipangkas dengan pernyataan berikut:

INPUT:
  SQL> SELECT NamaBelakang, RPAD (RTRIM (NamaBelakang), 20 ,'*') 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang RPAD (RTRIM (NamaBelakang) 
  -------------------- --------------- 
  Purvis Purvis ************** 
  TAYLOR TAYLOR ************** 
  CHRISTINE CHRISTINE *********** 
  Adams Adams *************** 
  COSTALES COSTALES ************ 
  **************** KONG KONG 
  6 baris yang dipilih. 

Outputnya trim membuktikan bahwa bekerja. Sekarang coba LTRIM:

INPUT:
  SQL> SELECT NamaBelakang, LTRIM (NamaBelakang, 'C') 
  2 DARI TOKOH;
OUTPUT:
  NamaBelakang LTRIM (NamaBelakang, 
  --------------- --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE HRISTINE 
  Adams Adams 
  COSTALES OSTALES 
  KONG KONG 
  6 baris yang dipilih. 

Perhatikan Cs hilang di baris ketiga dan kelima.

REPLACE

REPLACE tidak hanya itu. Dari tiga argumen, yang pertama adalah string yang akan dicari. Yang kedua adalah kunci pencarian. Yang terakhir adalah string pengganti opsional. Jika argumen ketiga adalah ditinggalkan atau NULL, setiap kemunculan tombol pencarian di string yang akan dicari akan dihapus dan tidak diganti dengan apa pun.

INPUT:
  SQL SELECT NamaBelakang>, REPLACE (NamaBelakang, 'ST') PENGGANTIAN 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang PENGGANTIAN 
  --------------- --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE CHRIINE 
  Adams Adams 
  COSTALES COALES 
  KONG KONG 
  6 baris yang dipilih. 

Jika Anda memiliki argumen ketiga, maka digantikan untuk setiap kemunculan tombol pencarian di string target. Sebagai contoh:

INPUT:
  SQL SELECT NamaBelakang>, REPLACE (NamaBelakang, 'ST','**') PENGGANTIAN 
  2 DARI TOKOH;
OUTPUT:
  NamaBelakang PENGGANTIAN 
  ------------ --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE Chri ** Ine 
  Adams Adams 
  CO COSTALES ** ALES 
  KONG KONG 
  6 baris yang dipilih. 

Jika argumen kedua adalah NULL, string target adalah kembali dengan tidak ada perubahan.

INPUT:
  SQL SELECT NamaBelakang>, REPLACE (NamaBelakang, NULL) PENGGANTIAN 
  2 DARI TOKOH;
OUTPUT:
  NamaBelakang PENGGANTIAN 
  --------------- --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE CHRISTINE 
  Adams Adams 
  COSTALES COSTALES 
  KONG KONG 
  6 baris yang dipilih. 

Substr

Argumen ini-fungsi tiga memungkinkan Anda untuk mengambil sepotong keluar dari sebuah string target. Argumen pertama adalah string target. Argumen kedua adalah posisi karakter pertama yang menjadi output. Argumen ketiga adalah jumlah karakter untuk menunjukkan.

INPUT:
  SQL> SELECT Nama depan, substr (Nama depan, 2,3) 
  2 DARI TOKOH;
OUTPUT:
 
  NamaDepan SUB 
  --------------- --- 
  kelly ela 
  CHUCK HUC 
  LAURA Aur 
  Bernanah EST 
  Armando RMA 
  Ajo UTAMA 
  6 baris yang dipilih. 

Jika Anda menggunakan angka negatif sebagai argumen kedua, titik awal ditentukan dengan menghitung mundur dari akhir, seperti ini:

INPUT:
  SQL> SELECT Nama depan, substr (Nama depan, -13,2) 
   2 DARI TOKOH;
OUTPUT:
  Nama depan SU 
  --------------- - 
  kelly ll 
  CHUCK UC 
  LAURA UR 
  Bernanah ST 
  Armando MA 
  UTAMA JO 
  6 baris yang dipilih. 
ANALISIS:

Ingat lapangan NamaDepan karakter dalam contoh ini adalah 15 karakter. Itu sebabnya Anda menggunakan -13 untuk mulai karakter ketiga. Menghitung kembali dari 15 menempatkan Anda pada awal karakter ketiga, bukan pada awal kedua. Jika Anda tidak memiliki argumen ketiga, gunakan pernyataan berikut ini sebagai gantinya:

INPUT:
  SQL> SELECT Nama depan, substr (Nama depan, 3) 
   2 DARI TOKOH;
OUTPUT:
  NamaDepan substr (FIRSTN 
  ------------- --------------- 
  kelly lly 
  CHUCK UCK 
  LAURA URA 
  Bernanah Ster 
  Armando MANDO 
  UTAMA Jor 
  6 baris yang dipilih. 

Sisa dari target string dikembalikan.

INPUT:
  SQL> SELECT * FROM SSN_TABLE;
OUTPUT:
  SSN__________ 
  300541117 
  301457111 
  459789998 
  3 baris yang dipilih. 
ANALISIS:

Membaca hasil output sebelumnya sulit – nomor Jaminan Sosial biasanya memiliki tanda hubung. Sekarang coba mewah sesuatu dan melihat apakah Anda menyukai hasilnya:

INPUT:
  SQL> SELECT substr (SSN, 1,3 )||'-'|| substr (SSN, 4,2 )||'-'|| substr (SSN, 6,4) SSN 
   2 DARI SSN_TABLE;
OUTPUT:
  SSN_________ 
  300-54-1117 
  301-45-7111 
  459-78-9998 
  3 baris yang dipilih. 

CATATAN: Khusus ini menggunakan fungsi substr bisa datang sangat berguna dengan jumlah besar dengan menggunakan koma seperti 1343178128 dan kode area dan nomor telepon seperti 317-787-2915 menggunakan tanda hubung.

Berikut ini adalah baik penggunaan fungsi substr. Misalkan Anda menulis laporan dan beberapa kolom lebih dari 50 karakter lebar. Anda dapat menggunakan fungsi substr untuk mengurangi lebar kolom ke ukuran diatur lebih jika Anda tahu sifat dari data aktual. Perhatikan dua contoh berikut:

INPUT:
  SQL> SELECT NAMA, JOB, DEPARTEMEN DARI JOB_TBL;
OUTPUT:
  NAME______________________________________________________________ 
  JOB_______________________________DEPARTMENT______________________ 
  ALVIN SMITH 
  VICEPRESIDENT PEMASARAN 

  1 ROW DIPILIH. 
ANALISIS:

Perhatikan bagaimana membungkus kolom, yang membuat membaca hasil agak terlalu sulit. Sekarang coba pilih ini:

INPUT:
  SQL> SELECT substr (NAMA, 1,15) NAMA, substr (JOB, 1,15) JOB, 
              DEPARTEMEN 
   2 DARI JOB_TBL;
OUTPUT:
  NAME________________JOB_______________DEPARTMENT_____ 
  ALVIN VICEPRESIDENT PEMASARAN SMITH 

Jauh lebih baik!

Menterjemahkan

Fungsi Terjemahkan mengambil tiga argumen: string target, string DARI, dan TO string. Unsur dari string target yang terjadi dalam string DARI dijabarkan pada unsur terkait di TO string.

INPUT:
  SQL SELECT NamaDepan>, menerjemahkan (Nama depan 
    2 '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 
    3 'NNNNNNNNNNAAAAAAAAAAAAAAAAAAAAAAAAAA) 
   4 DARI TOKOH;
OUTPUT:
  Terjemahkan Nama depan (PERTAMA 
  --------------- --------------- 
  kelly kelly 
  CHUCK AAAAA 
  LAURA AAAAA 
  Bernanah AAAAAA 
  Armando AAAAAAA 
  AAAAA UTAMA 
  6 baris yang dipilih. 

Perhatikan bahwa fungsi adalah kasus sensitif.

InStr

Untuk mencari tahu di mana dalam sebuah string pola tertentu terjadi, InStr digunakan. Argumen pertama adalah string target. Argumen kedua adalah pola untuk mencocokkan. Yang ketiga dan sebagainya adalah nomor mewakili mana harus mulai mencari dan yang cocok dengan laporan. Contoh ini return angka mewakili kemunculan awal O dimulai dengan karakter kedua:

INPUT:
  SQL> SELECT NamaBelakang, InStr (NamaBelakang, 'O', 2, 1) 
    2 DARI TOKOH;
OUTPUT:
  NamaBelakang InStr (NamaBelakang, 'O', 2,1) 
  --------------- ----------------------- 
  Purvis 0 
  TAYLOR 5 
  CHRISTINE 0 
  Adams 0 
  COSTALES 2 
  KONG 2 
  6 baris yang dipilih. 
ANALISIS:

Default untuk argumen ketiga dan keempat adalah 1. Jika argumen ketiga adalah negatif, pencarian dimulai di posisi yang ditentukan dari akhir string, bukan dari awal.

LENGTH

LENGTH mengembalikan argumen panjang karakter satunya perusahaan. Sebagai contoh:

INPUT:
  SQL> SELECT Nama depan, LENGTH (RTRIM (Nama depan)) 
   2 DARI TOKOH;
OUTPUT:
  NamaDepan LENGTH (RTRIM (Nama depan)) 
  --------------- ------------------------ 
  kelly 5 
  CHUCK 5 
  LAURA 5 
  Bernanah 6 
  Armando 7 
  MAYOR 5 
  6 baris yang dipilih. 
ANALISIS:

Perhatikan penggunaan fungsi RTRIM. Jika tidak, LENGTH akan kembali 15 untuk setiap nilai.

Fungsi Konversi

Ketiga fungsi konversi menyediakan cara mudah untuk mengubah satu jenis data yang lain. Contoh-contoh ini menggunakan KONVERSI tabel.

INPUT:
  SQL> SELECT * FROM KONVERSI;
OUTPUT:
  NAMA TESTNUM 
  --------------- --------- 
  40 95 
  13 23 
  74 68 

Kolom NAMA adalah suatu string karakter 15 karakter lebar, dan TESTNUM adalah angka.

TO_CHAR

Penggunaan utama adalah untuk mengkonversi TO_CHAR angka menjadi karakter. implementasi yang berbeda-beda juga dapat menggunakannya untuk mengkonversi data jenis lain, seperti Date, menjadi sebuah karakter, atau untuk memasukkan argumen format yang berbeda. Contoh berikut menggambarkan penggunaan utama TO_CHAR:

INPUT:
  SQL> SELECT TESTNUM, TO_CHAR (TESTNUM) 
   2 DARI CONVERT;
OUTPUT:
  TESTNUM TO_CHAR (TESTNUM) 
  --------- ---------------- 
         95 95 
         23 23 
         68 68 

Tidak terlalu menarik, atau meyakinkan. Berikut adalah cara untuk memverifikasi bahwa fungsi kembali string karakter:

INPUT:
  SQL> SELECT TESTNUM, LENGTH (TO_CHAR (TESTNUM)) 
  2 CONVERT DARI;
OUTPUT:
  TESTNUM LENGTH (TO_CHAR (TESTNUM)) 
  --------- ------------------------ 
         95 2 
         23 2 
         68 2 
ANALISIS:

LENGTH angka akan kembali kesalahan. Perhatikan perbedaan antara ATAS CHAR dan fungsi CHR dibahas sebelumnya. CHR akan berpaling jumlah ini menjadi karakter atau simbol, tergantung pada karakter set.

TO_NUMBER

TO_NUMBER adalah fungsi pendamping untuk TO_CHAR, dan tentu saja, itu mengkonversi string ke nomor. Sebagai contoh:

INPUT:
  SQL> SELECT NAMA, TESTNUM, TESTNUM * TO_NUMBER (NAMA) 
  2 DARI CONVERT;
OUTPUT:
  NAMA TESTNUM TESTNUM * TO_NUMBER (NAMA) 
  --------------- -------- ----------------------- 
  40 95 3800 
  13 23 299 
  74 68 5032 
ANALISIS:

Tes ini akan kembali kesalahan jika TO_NUMBER telah kembali karakter.

Miscellaneous Fungsi

Berikut adalah tiga fungsi lain-lain Anda mungkin menemukan berguna.

Terbesar dan TERENDAH

Fungsi ini menemukan Terbesar atau anggota KUADRAT dari serangkaian ekspresi. Sebagai contoh:

INPUT:
  SQL> SELECT Terbesar ('ALPHA', 'BRAVO', 'Foxtrot', 'DELTA') 
    2 DARI CONVERT;
OUTPUT:
  Terbesar 
  ------- 
  Foxtrot 
  Foxtrot 
  Foxtrot 
ANALISIS:

Perhatikan Terbesar menemukan kata yang paling dekat ke ujung abjad. Perhatikan juga tidak perlu DARI tampaknya dan tiga kejadian dari Foxtrot. Jika DARI hilang, Anda akan mendapatkan pesan kesalahan. Setiap SELECT kebutuhan DARI sebuah. Tabel khusus yang digunakan dalam DARI memiliki tiga baris, sehingga fungsi dalam klausa SELECT dilakukan untuk masing-masing.

INPUT:
  SQL> SELECT KUADRAT (34, 567, 3, 45, 1090) 
  2 DARI CONVERT;
OUTPUT:
  KUADRAT (34,567,3,45,1090) 
  ----------------------- 
                        3 
                        3 
                        3 

Seperti yang Anda lihat, Terbesar dan KUADRAT juga bekerja dengan angka.

PENGGUNA

PENGGUNA mengembalikan karakter nama pengguna saat ini database.

INPUT:
  SQL SELECT PENGGUNA> DARI CONVERT;
OUTPUT:
  PENGGUNA 
  ------------------------------ 
  PERKINS 
  PERKINS 
  PERKINS 

Ada benar-benar hanya satu dari saya. Sekali lagi, gema terjadi karena jumlah baris dalam tabel. PENGGUNA mirip dengan fungsi tanggal hari ini dijelaskan sebelumnya. Meskipun PENGGUNA bukan kolom aktual dalam tabel, maka dipilih untuk setiap baris yang terdapat dalam tabel.

Ringkasan

Ini telah menjadi hari yang panjang. Kami meliput 47 fungsi – dari agregat untuk konversi). Anda tidak perlu mengingat setiap fungsi – hanya mengetahui secara umum jenis agregat (fungsi, tanggal waktu dan fungsi aritmatika, fungsi karakter, fungsi konversi, fungsi, aneka dan fungsi ini cukup untuk mengarahkan Anda ke arah yang benar ketika Anda membangun sebuah query yang memerlukan fungsi.

Sumber ; http://www.webbasedprogramming.com