You are on page 1of 43

3

Single-Row Functions

Copyright  Oracle Corporation, 1998. All rights reserved.


Objectives

After
After completing
completing this
this lesson,
lesson, you
you should
should
be
be able
able to
to do
do the
the following:
following:
•• Describe
Describe various
various types
types of
of functions
functions
available
available in
in SQL
SQL
•• Use
Use character,
character, number,
number, andand date
date
functions
functions in
in SELECT
SELECT statements
statements
•• Describe
Describe the
the use
use of
of conversion
conversion
functions
functions

3-2 Copyright  Oracle Corporation, 1998. All rights reserved.


SQL Functions

Input Output
Function

arg 1 Function
performs action
arg 2
Result
value

arg n

3-3 Copyright  Oracle Corporation, 1998. All rights reserved.


Two Types of SQL Functions

Functions

Single-row Multiple-row
functions functions

3-4 Copyright  Oracle Corporation, 1998. All rights reserved.


Single-Row Functions
•• Manipulate
Manipulate data
data items
items
•• Accept
Accept arguments
arguments and
and return
return one
one value
value
•• Act
Act on
on each
each row
row returned
returned
•• Return
Return one
one result
result per
per row
row
•• May
May modify
modify the
the datatype
datatype
•• Can
Can be
be nested
nested
function_name
function_name (column|expression,
(column|expression, [arg1,
[arg1, arg2,...])
arg2,...])

3-5 Copyright  Oracle Corporation, 1998. All rights reserved.


Single-Row Functions

Character

General Number
Single-row
functions

Conversion Date

3-6 Copyright  Oracle Corporation, 1998. All rights reserved.


Character Functions
Character
functions

Case conversion Character manipulation


functions functions
LOWER CONCAT
UPPER SUBSTR
INITCAP LENGTH
INSTR
LPAD
3-7 Copyright  Oracle Corporation, 1998. All rights reserved.
Case Conversion Functions

Convert
Convert case
case for
for character
character strings
strings
Function Result
LOWER('SQL Course') sql course
UPPER('SQL Course') SQL COURSE
INITCAP('SQL Course') Sql Course

3-8 Copyright  Oracle Corporation, 1998. All rights reserved.


Using Case Conversion Functions
Display
Display the
the employee
employee number,
number, name,
name, and
and
department
department number
number for
for employee
employee Blake.
Blake.
SQL>
SQL> SELECT
SELECT empno,
empno, ename,
ename, deptno
deptno
22 FROM
FROM emp
emp
33 WHERE
WHERE ename
ename == 'blake';
'blake';
no
no rows
rows selected
selected

SQL> SELECT empno, ename, deptno


2 FROM emp
3 WHERE LOWER(ename) = 'blake';

EMPNO
EMPNO ENAME
ENAME DEPTNO
DEPTNO
---------
--------- ----------
---------- ---------
---------
7698
7698 BLAKE
BLAKE 30
30

3-9 Copyright  Oracle Corporation, 1998. All rights reserved.


Character Manipulation Functions

Manipulate
Manipulate character
character strings
strings
Function Result
CONCAT('Good', 'String') GoodString
SUBSTR('String',1,3) Str
LENGTH('String') 6
INSTR('String', 'r') 3
LPAD(sal,10,'*') ******5000

3-10 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the Character
Manipulation Functions

SQL> SELECT ename, CONCAT (ename, job), LENGTH(ename),


2 INSTR(ename, 'A')
3 FROM emp
4 WHERE SUBSTR(job,1,5) = 'SALES';

ENAME CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A')


---------- ------------------- ------------- ----------------
MARTIN MARTINSALESMAN 6 2
ALLEN ALLENSALESMAN 5 1
TURNER TURNERSALESMAN 6 0
WARD WARDSALESMAN 4 2

3-11 Copyright  Oracle Corporation, 1998. All rights reserved.


Number Functions
•• ROUND:
ROUND: Rounds
Rounds value
value to
to specified
specified
decimal
decimal
ROUND(45.926,
ROUND(45.926, 2)
2) 45.93
45.93
•• TRUNC:
TRUNC: Truncates
Truncates value
value to
to specified
specified
decimal
decimal
TRUNC(45.926,
TRUNC(45.926, 2)
2) 45.92
45.92

•• MOD:
MOD: Returns
Returns remainder
remainder of
of division
division
MOD(1600,
MOD(1600, 300)
300) 100
100
3-12 Copyright  Oracle Corporation, 1998. All rights reserved.
Using the ROUND Function

SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),


2 ROUND(45.923,-1)
3 FROM DUAL;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)


--------------- -------------- -----------------
45.92 46 50

3-13 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the TRUNC Function

SQL> SELECT TRUNC(45.923,2), TRUNC(45.923),


2 TRUNC(45.923,-1)
3 FROM DUAL;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)


--------------- ------------- ---------------
45.92 45 40

3-14 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the MOD Function
Calculate
Calculate the
the remainder
remainder ofof the
the ratio
ratio of
of
salary
salary to
to commission
commission for for all
all employees
employees
whose
whose job
job title
title is
is salesman.
salesman.
SQL> SELECT ename, sal, comm, MOD(sal, comm)
2 FROM emp
3 WHERE job = 'SALESMAN';

ENAME SAL COMM MOD(SAL,COMM)


---------- --------- --------- -------------
MARTIN 1250 1400 1250
ALLEN 1600 300 100
TURNER 1500 0 1500
WARD 1250 500 250

3-15 Copyright  Oracle Corporation, 1998. All rights reserved.


Working with Dates
•• Oracle
Oracle stores
stores dates
dates in
in an
an internal
internal
numeric
numeric format:
format: century,
century, year,
year, month,
month,
day,
day, hours,
hours, minutes,
minutes, seconds.
seconds.
•• The
The default
default date
date format
format is
is DD-MON-YY.
DD-MON-YY.
•• SYSDATE
SYSDATE is is aa function
function returning
returning date
date
and
and time.
time.
•• DUAL
DUAL isis aa dummy
dummy table
table used
used to
to view
view
SYSDATE.
SYSDATE.

3-16 Copyright  Oracle Corporation, 1998. All rights reserved.


Arithmetic with Dates

•• Add
Add or
or subtract
subtract aa number
number to to or
or from
from aa
date
date for
for aa resultant
resultant date
date value.
value.
•• Subtract
Subtract two
two dates
dates to
to find
find the
the number
number of of
days
days between
between those
those dates.
dates.
•• Add
Add hours
hours toto aa date
date by
by dividing
dividing the
the
number
number of of hours
hours byby 24.
24.

3-17 Copyright  Oracle Corporation, 1998. All rights reserved.


Using Arithmetic Operators
with Dates

SQL> SELECT ename, (SYSDATE-hiredate)/7 WEEKS


2 FROM emp
3 WHERE deptno = 10;

ENAME WEEKS
---------- ---------
KING 830.93709
CLARK 853.93709
MILLER 821.36566

3-18 Copyright  Oracle Corporation, 1998. All rights reserved.


Date Functions
Function Description

MONTHS_BETWEEN Number of months


between two dates
ADD_MONTHS Add calendar months to
date
NEXT_DAY Next day of the date
specified

LAST_DAY Last day of the month


ROUND Round date

TRUNC Truncate date

3-19 Copyright  Oracle Corporation, 1998. All rights reserved.


Using Date Functions
• MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')
19.6774194

• ADD_MONTHS ('11-JAN-94',6) '11-JUL-94'

• NEXT_DAY ('01-SEP-95','FRIDAY') '08-SEP-95'

• LAST_DAY('01-SEP-95') '30-SEP-95'

3-20 Copyright  Oracle Corporation, 1998. All rights reserved.


Using Date Functions

• ROUND('25-JUL-95','MONTH') 01-AUG-95

• ROUND('25-JUL-95','YEAR') 01-JAN-96
• TRUNC('25-JUL-95','MONTH') 01-JUL-95

• TRUNC('25-JUL-95','YEAR') 01-JAN-95

3-21 Copyright  Oracle Corporation, 1998. All rights reserved.


SQL> SELECTempno, hiredate,
MONTHS_BETWEEN(SYSDATE,
hiredate) TENURE,
ADD_MONTHS(hiredate, 6) REVIEW,
NEXT_DAY(hiredate, 'FRIDAY'),
LAST_DAY(hiredate)
FROM emp
WHERE MONTHS_BETWEEN (SYSDATE,
hiredate)<200;

3-22 Copyright  Oracle Corporation, 1998. All rights reserved.


Conversion Functions

Datatype
conversion

Implicit datatype Explicit datatype


conversion conversion

3-23 Copyright  Oracle Corporation, 1998. All rights reserved.


Implicit Datatype Conversion

For
For assignments,
assignments, the
the Oracle
Oracle can
can
automatically
automatically convert
convert the
the following:
following:
From To
VARCHAR2 or CHAR NUMBER

VARCHAR2 or CHAR DATE

NUMBER VARCHAR2

DATE VARCHAR2

3-24 Copyright  Oracle Corporation, 1998. All rights reserved.


Implicit Datatype Conversion

For
For expression
expression evaluation,
evaluation, the
the Oracle
Oracle Server
Server
can
can automatically
automatically convert
convert the
the following:
following:
From To
VARCHAR2 or CHAR NUMBER

VARCHAR2 or CHAR DATE

3-25 Copyright  Oracle Corporation, 1998. All rights reserved.


Explicit Datatype Conversion
TO_NUMBER TO_DATE

NUMBER CHARACTER DATE

TO_CHAR TO_CHAR

3-26 Copyright  Oracle Corporation, 1998. All rights reserved.


TO_CHAR Function with Dates

TO_CHAR(date,
TO_CHAR(date, 'fmt')
'fmt')

The
The format
format model:
model:
•• Must
Must bebe enclosed
enclosed in
in single
single quotation
quotation marks
marks
and
and is
is case
case sensitive
sensitive
•• Can
Can include
include any
any valid
valid date
date format
format element
element
•• Has
Has an
an fm
fm element
element to
to remove
remove padded
padded
blanks
blanks oror suppress
suppress leading
leading zeros
zeros
•• Is
Is separated
separated from
from the
the date
date value
value by
by aa
comma
comma
3-27 Copyright  Oracle Corporation, 1998. All rights reserved.
Elements of Date Format Model

YYYY Full year in numbers

YEAR Year spelled out

MM Two-digit value for month

MONTH Full name of the month


Three-letter abbreviation of the
DY
day of the week
DAY Full name of the day

3-28 Copyright  Oracle Corporation, 1998. All rights reserved.


Elements of Date Format Model

• Time
Time elements
elements format
format the
the time
time portion
portion of
of
the
the date.
date.
HH24:MI:SS AM 15:45:32 PM
• Add
Add character
character strings
strings by
by enclosing
enclosing them
them
in
in double
double quotation
quotation marks.
marks.
DD "of" MONTH 12 of OCTOBER
• Number
Number suffixes
suffixes spell
spell out
out numbers.
numbers.
ddspth fourteenth

3-29 Copyright  Oracle Corporation, 1998. All rights reserved.


Using TO_CHAR Function
with Dates
SQL> SELECT ename,
2 TO_CHAR(hiredate, 'fmDD Month YYYY') HIREDATE
3 FROM emp;

ENAME HIREDATE
---------- -----------------
KING 17 November 1981
BLAKE 1 May 1981
CLARK 9 June 1981
JONES 2 April 1981
MARTIN 28 September 1981
ALLEN 20 February 1981
...
14 rows selected.

3-30 Copyright  Oracle Corporation, 1998. All rights reserved.


TO_CHAR Function with Numbers
TO_CHAR(number,
TO_CHAR(number, 'fmt')
'fmt')

Use
Use these
these formats
formats with
with the
the TO_CHAR
TO_CHAR
function
function to
to display
display aa number
number value
value as
as aa
character:
character:
9 Represents a number
0 Forces a zero to be displayed
$ Places a floating dollar sign
L Uses the floating local currency symbol
. Prints a decimal point
, Prints a thousand indicator
3-31 Copyright  Oracle Corporation, 1998. All rights reserved.
Using TO_CHAR Function
with Numbers

SQL> SELECT TO_CHAR(sal,'$99,999') SALARY


2 FROM emp
3 WHERE ename = 'SCOTT';

SALARY
--------
$3,000

3-32 Copyright  Oracle Corporation, 1998. All rights reserved.


TO_NUMBER and TO_DATE
Functions
•• Convert
Convert aa character
character string
string to
to aa number
number
format
format using
using the
the TO_NUMBER
TO_NUMBER function
function

TO_NUMBER(char[,
TO_NUMBER(char[, 'fmt'])
'fmt'])

•• Convert
Convert aa character
character string
string to
to aa date
date
format
format using
using the
the TO_DATE
TO_DATE function
function

TO_DATE(char[,
TO_DATE(char[, 'fmt'])
'fmt'])

3-33 Copyright  Oracle Corporation, 1998. All rights reserved.


RR Date Format
Current Year Specified Date RR Format YY Format
1995 27-OCT-95 1995 1995
1995 27-OCT-17 2017 1917
2001 27-OCT-17 2017 2017
2001 27-OCT-95 1995 2095

If the specified two-digit year is:

0–49 50–99
If two digits The return date is in The return date is in
of the 0–49 the current century the century before
current the current one
year are: The return date is The return date is in
50–99 in the century after the current century
the current one

3-34 Copyright  Oracle Corporation, 1998. All rights reserved.


NVL Function

Converts
Converts null
null to
to an
an actual
actual value
value
•• Datatypes
Datatypes that
that can
can be
be used
used are
are date,
date,
character,
character, and
and number.
number.
•• Datatypes
Datatypes must
must match
match
–– NVL(comm,0)
NVL(comm,0)
–– NVL(hiredate,'01-JAN-97')
NVL(hiredate,'01-JAN-97')
–– NVL(job,'No
NVL(job,'No Job
Job Yet')
Yet')

3-35 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the NVL Function

SQL> SELECT ename, sal, comm, (sal*12)+NVL(comm,0)


2 FROM emp;

ENAME SAL COMM (SAL*12)+NVL(COMM,0)


---------- --------- --------- --------------------
KING 5000 60000
BLAKE 2850 34200
CLARK 2450 29400
JONES 2975 35700
MARTIN 1250 1400 16400
ALLEN 1600 300 19500
...
14 rows selected.

3-36 Copyright  Oracle Corporation, 1998. All rights reserved.


DECODE Function

Facilitates
Facilitates conditional
conditional inquiries
inquiries by
by doing
doing
the
the work
work of
of aa CASE
CASE or
or IF-THEN-ELSE
IF-THEN-ELSE
statement
statement
DECODE(col/expression,
DECODE(col/expression, search1,
search1, result1
result1
[,
[, search2,
search2, result2,...,]
result2,...,]
[,
[, default])
default])

3-37 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the DECODE Function

SQL> SELECT job, sal,


2 DECODE(job, 'ANALYST', SAL*1.1,
3 'CLERK', SAL*1.15,
4 'MANAGER', SAL*1.20,
5 SAL)
6 REVISED_SALARY
7 FROM emp;

JOB SAL REVISED_SALARY


--------- --------- --------------
PRESIDENT 5000 5000
MANAGER 2850 3420
MANAGER 2450 2940
...
14 rows selected.

3-38 Copyright  Oracle Corporation, 1998. All rights reserved.


Using the DECODE Function
Display
Display the
the applicable
applicable tax
tax rate
rate for
for each
each
employee
employee in
in department
department 30.
30.
SQL> SELECT ename, sal,
2 DECODE(TRUNC(sal/1000, 0),
3 0, 0.00,
4 1, 0.09,
5 2, 0.20,
6 3, 0.30,
7 4, 0.40,
8 5, 0.42,
9 6, 0.44,
10 0.45) TAX_RATE
11 FROM emp
12 WHERE deptno = 30;

3-39 Copyright  Oracle Corporation, 1998. All rights reserved.


Nesting Functions

•• Single-row
Single-row functions
functions can
can be
be nested
nested to
to
any
any level.
level.
•• Nested
Nested functions
functions are
are evaluated
evaluated from
from
deepest
deepest level
level to
to the
the least-deep
least-deep level.
level.
F3(F2(F1(col,arg1),arg2),arg3)

Step 1 = Result 1
Step 2 = Result 2
Step 3 = Result 3

3-40 Copyright  Oracle Corporation, 1998. All rights reserved.


Nesting Functions

SQL> SELECT ename,


2 NVL(TO_CHAR(mgr),'No Manager')
3 FROM emp
4 WHERE mgr IS NULL;

ENAME NVL(TO_CHAR(MGR),'NOMANAGER')
---------- -----------------------------
KING No Manager

3-41 Copyright  Oracle Corporation, 1998. All rights reserved.


Summary

Use
Use functions
functions to
to do
do the
the following:
following:
•• Perform
Perform calculations
calculations on
on data
data
•• Modify
Modify individual
individual data
data items
items
•• Manipulate
Manipulate output
output for
for groups
groups of
of rows
rows
•• Alter
Alter date
date formats
formats for
for display
display
•• Convert
Convert column
column datatypes
datatypes

3-42 Copyright  Oracle Corporation, 1998. All rights reserved.


Practice Overview

•• Creating
Creating queries
queries that
that require
require the
the use
use of
of
numeric,
numeric, character,
character, and
and date
date functions
functions
•• Using
Using concatenation
concatenation with
with functions
functions
•• Writing
Writing case-insensitive
case-insensitive queries
queries toto test
test
the
the usefulness
usefulness of
of character
character functions
functions
•• Performing
Performing calculations
calculations ofof years
years and
and
months
months of
of service
service for
for an
an employee
employee
•• Determining
Determining the
the review
review date
date for
for an
an
employee
employee
3-43 Copyright  Oracle Corporation, 1998. All rights reserved.

You might also like