Single-Row Functions
3
Copyright © Oracle Corporation, 2001. All rights reserved.
Objectives
After completing this lesson, you should be able to
do the following:
3-2
Copyright © Oracle Corporation, 2001. All rights reserved.
SQL Functions
Function
Input
arg 1
arg 2
arg n
Function performs action
Output
Result
value
3-3
Copyright © Oracle Corporation, 2001. All rights reserved.
Two Types of SQL Functions
Functions
Single-row
functions
Multiple-row
functions
3-4
Copyright © Oracle Corporation, 2001. All rights reserved.
Single-Row Functions
Single row functions:
function_name [(arg1, arg2,...)]
3-5
Copyright © Oracle Corporation, 2001. All rights reserved.
Single-Row Functions
Conversion
Character
Number
Date
General
Single-row
functions
3-6
Copyright © Oracle Corporation, 2001. All rights reserved.
Character Functions
Character
functions
LOWER
UPPER
INITCAP
CONCAT
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
Case-manipulation
functions
Character-manipulation
functions
3-7
Copyright © Oracle Corporation, 2001. All rights reserved.
Character Functions
Character
functions
LOWER
UPPER
INITCAP
CONCAT
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
Case-manipulation
functions
Character-manipulation
functions
3-8
Copyright © Oracle Corporation, 2001. All rights reserved.
Case Manipulation Functions
These functions convert case for character strings.
Function
Result
LOWER('SQL Course')
UPPER('SQL Course')
INITCAP('SQL Course')
sql course
SQL COURSE
Sql Course
3-9
Copyright © Oracle Corporation, 2001. All rights reserved.
Using Case Manipulation Functions
Display the employee number, name, and department number for employee Higgins:
SELECT employee_id, last_name, department_id
FROM employees
WHERE last_name = 'higgins';
no rows selected
SELECT employee_id, last_name, department_id
FROM employees
WHERE LOWER(last_name) = 'higgins';
3-10
Copyright © Oracle Corporation, 2001. All rights reserved.
Character-Manipulation Functions
These functions manipulate character strings:
CONCAT('Hello', 'World')
SUBSTR('HelloWorld',1,5)
LENGTH('HelloWorld')
INSTR('HelloWorld', 'W')
LPAD(salary,10,'*')
RPAD(salary, 10, '*')
TRIM('H' FROM 'HelloWorld')
HelloWorld
Hello
10
6
*****24000
24000*****
elloWorld
Function
Result
3-11
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the Character-Manipulation Functions
SELECT employee_id, CONCAT(first_name, last_name) NAME,
job_id, LENGTH (last_name),
INSTR(last_name, 'a') "Contains 'a'?"
FROM employees
WHERE SUBSTR(job_id, 4) = 'REP';
1
2
3
1
2
3
3-12
Copyright © Oracle Corporation, 2001. All rights reserved.
Number Functions
ROUND(45.926, 2) 45.93
TRUNC(45.926, 2) 45.92
MOD(1600, 300) 100
3-13
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the ROUND Function
SELECT ROUND(45.923,2), ROUND(45.923,0),
ROUND(45.923,-1)
FROM DUAL;
DUAL is a dummy table you can use to view results
from functions and calculations.
1
2
3
3
1
2
3-14
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the TRUNC Function
SELECT TRUNC(45.923,2), TRUNC(45.923),
TRUNC(45.923,-2)
FROM DUAL;
3
1
2
1
2
3
3-15
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the MOD Function
Calculate the remainder of a salary after it is divided by 5000 for all employees whose job title is sales representative.
SELECT last_name, salary, MOD(salary, 5000)
FROM employees
WHERE job_id = 'SA_REP';
3-16
Copyright © Oracle Corporation, 2001. All rights reserved.
Working with Dates
SELECT last_name, hire_date
FROM employees
WHERE last_name like 'G%';
3-17
Copyright © Oracle Corporation, 2001. All rights reserved.
Working with Dates
SYSDATE is a function that returns:
3-18
Copyright © Oracle Corporation, 2001. All rights reserved.
Arithmetic with Dates
3-19
Copyright © Oracle Corporation, 2001. All rights reserved.
Using Arithmetic Operators�with Dates
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS
FROM employees
WHERE department_id = 90;
3-20
Copyright © Oracle Corporation, 2001. All rights reserved.
Date Functions
Number of months�between two dates
MONTHS_BETWEEN
ADD_MONTHS
NEXT_DAY
LAST_DAY
ROUND
TRUNC
Add calendar months to date
Next day of the date specified
Last day of the month
Round date
Truncate date
Function
Description
3-21
Copyright © Oracle Corporation, 2001. All rights reserved.
Using Date Functions
19.6774194
'11-JUL-94'
'08-SEP-95'
'28-FEB-95'
3-22
Copyright © Oracle Corporation, 2001. All rights reserved.
Using Date Functions
Assume SYSDATE = '25-JUL-95':
3-23
Copyright © Oracle Corporation, 2001. All rights reserved.
Practice 3, Part One: Overview
This practice covers the following topics:
3-24
Copyright © Oracle Corporation, 2001. All rights reserved.
Conversion Functions
Implicit data type
conversion
Explicit data type
conversion
Data type
conversion
3-25
Copyright © Oracle Corporation, 2001. All rights reserved.
Implicit Data Type Conversion
For assignments, the Oracle server can automatically
convert the following:
VARCHAR2 or CHAR
From
To
VARCHAR2 or CHAR
NUMBER
DATE
NUMBER
DATE
VARCHAR2
VARCHAR2
3-26
Copyright © Oracle Corporation, 2001. All rights reserved.
Implicit Data Type Conversion
For expression evaluation, the Oracle Server can
automatically convert the following:
VARCHAR2 or CHAR
From
To
VARCHAR2 or CHAR
NUMBER
DATE
3-27
Copyright © Oracle Corporation, 2001. All rights reserved.
Explicit Data Type Conversion
NUMBER
CHARACTER
TO_CHAR
TO_NUMBER
DATE
TO_CHAR
TO_DATE
3-28
Copyright © Oracle Corporation, 2001. All rights reserved.
Explicit Data Type Conversion
NUMBER
CHARACTER
TO_CHAR
TO_NUMBER
DATE
TO_CHAR
TO_DATE
3-29
Copyright © Oracle Corporation, 2001. All rights reserved.
Explicit Data Type Conversion
NUMBER
CHARACTER
TO_CHAR
TO_NUMBER
DATE
TO_CHAR
TO_DATE
3-30
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the TO_CHAR Function with Dates
The format model:
TO_CHAR(date, 'format_model')
3-31
Copyright © Oracle Corporation, 2001. All rights reserved.
Elements of the Date Format Model
YYYY
YEAR
MM
MONTH
DY
DAY
Full year in numbers
Year spelled out
Two-digit value for month
Three-letter abbreviation of the day of the week
Full name of the day of the week
Full name of the month
MON
Three-letter abbreviation of the month
DD
Numeric day of the month
3-32
Copyright © Oracle Corporation, 2001. All rights reserved.
3-33
Copyright © Oracle Corporation, 2001. All rights reserved.
Elements of the Date Format Model
HH24:MI:SS AM
15:45:32 PM
DD "of" MONTH
12 of OCTOBER
ddspth
fourteenth
3-34
Copyright © Oracle Corporation, 2001. All rights reserved.
3-35
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the TO_CHAR Function with Dates
SELECT last_name,
TO_CHAR(hire_date, 'fmDD Month YYYY')
AS HIREDATE
FROM employees;
…
3-36
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the TO_CHAR Function with Numbers
These are some of the format elements you can use with the TO_CHAR function to display a number value as a character:
TO_CHAR(number, 'format_model')
9
0
$
L
.
,
Represents a number
Forces a zero to be displayed
Places a floating dollar sign
Uses the floating local currency symbol
Prints a decimal point
Prints a thousand indicator
3-37
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the TO_CHAR Function with Numbers
SELECT TO_CHAR(salary, '$99,999.00') SALARY
FROM employees
WHERE last_name = 'Ernst';
3-38
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the TO_NUMBER and TO_DATE Functions
TO_NUMBER(char[, 'format_model'])
TO_DATE(char[, 'format_model'])
3-39
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the TO_NUMBER and TO_DATE Functions
TO_NUMBER(char[, 'format_model'])
TO_DATE(char[, 'format_model'])
3-40
Copyright © Oracle Corporation, 2001. All rights reserved.
RR Date Format
Current Year
1995
1995
2001
2001
Specified Date
27-OCT-95
27-OCT-17
27-OCT-17
27-OCT-95
RR Format
1995
2017
2017
1995
YY Format
1995
1917
2017
2095
If two digits of the current �year are:
0–49
0–49
50–99
50–99
The return date is in the current century
The return date is in the century after the current one
The return date is in the century before the current one
The return date is in the current century
If the specified two-digit year is:
3-41
Copyright © Oracle Corporation, 2001. All rights reserved.
Example of RR Date Format
To find employees hired prior to 1990, use the RR
format, which produces the same results whether the
command is run in 1999 or now:
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')
FROM employees
WHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR');
3-42
Copyright © Oracle Corporation, 2001. All rights reserved.
Nesting Functions
F3(F2(F1(col,arg1),arg2),arg3)
Step 1 = Result 1
Step 2 = Result 2
Step 3 = Result 3
3-43
Copyright © Oracle Corporation, 2001. All rights reserved.
Nesting Functions
SELECT last_name,
NVL(TO_CHAR(manager_id), 'No Manager')
FROM employees
WHERE manager_id IS NULL;
3-44
Copyright © Oracle Corporation, 2001. All rights reserved.
General Functions
These functions work with any data type and pertain
to using nulls.
3-45
Copyright © Oracle Corporation, 2001. All rights reserved.
NVL Function
Converts a null to an actual value.
3-46
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the NVL Function
SELECT last_name, salary, NVL(commission_pct, 0),
(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;
…
1
2
1
2
3-47
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the NVL2 Function
SELECT last_name, salary, commission_pct,
NVL2(commission_pct,
'SAL+COMM', 'SAL') income
FROM employees WHERE department_id IN (50, 80);
1
2
1
2
3-48
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the NULLIF Function
SELECT first_name, LENGTH(first_name) "expr1",
last_name, LENGTH(last_name) "expr2",
NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM employees;
…
1
2
3
1
2
3
3-49
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the COALESCE Function
3-50
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the COALESCE Function
SELECT last_name,
COALESCE(commission_pct, salary, 10) comm
FROM employees
ORDER BY commission_pct;
…
3-51
Copyright © Oracle Corporation, 2001. All rights reserved.
Conditional Expressions
3-52
Copyright © Oracle Corporation, 2001. All rights reserved.
The CASE Expression
Facilitates conditional inquiries by doing the work of
an IF-THEN-ELSE statement:
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
3-53
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the CASE Expression
Facilitates conditional inquiries by doing the work of
an IF-THEN-ELSE statement:
SELECT last_name, job_id, salary,
CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP' THEN 1.20*salary
ELSE salary END "REVISED_SALARY"
FROM employees;
…
…
3-54
Copyright © Oracle Corporation, 2001. All rights reserved.
The DECODE Function
Facilitates conditional inquiries by doing the work of a CASE or IF-THEN-ELSE statement:
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])
3-55
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the DECODE Function
SELECT last_name, job_id, salary,
DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP', 1.20*salary,
salary)
REVISED_SALARY
FROM employees;
…
…
3-56
Copyright © Oracle Corporation, 2001. All rights reserved.
Using the DECODE Function
Display the applicable tax rate for each employee in department 80.
SELECT last_name, salary,
DECODE (TRUNC(salary/2000, 0),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,
0.45) TAX_RATE
FROM employees
WHERE department_id = 80;
3-57
Copyright © Oracle Corporation, 2001. All rights reserved.
Summary
In this lesson, you should have learned how to:
3-58
Copyright © Oracle Corporation, 2001. All rights reserved.
Practice 3, Part Two: Overview
This practice covers the following topics:
3-59
Copyright © Oracle Corporation, 2001. All rights reserved.
3-60
Copyright © Oracle Corporation, 2001. All rights reserved.
3-61
Copyright © Oracle Corporation, 2001. All rights reserved.
3-62
Copyright © Oracle Corporation, 2001. All rights reserved.
3-63
Copyright © Oracle Corporation, 2001. All rights reserved.
3-64
Copyright © Oracle Corporation, 2001. All rights reserved.
3-65
Copyright © Oracle Corporation, 2001. All rights reserved.
3-66
Copyright © Oracle Corporation, 2001. All rights reserved.