Think Different Basis Data : SQL- QUERY CF124g04

Scalar Functions and Arithmetic

© Copyright IBM Corporation 2007
Course materials may not be reproduced in whole or in part without the prior written permission of IBM.

4.0.3
3.3.1

Unit Objectives
After completing this unit, you should be able to:

ƒ Use arithmetic in the SELECT and WHERE clauses

ƒ Use basic scalar functions such as COALESCE/VALUE,
DECIMAL, SUBSTR
ƒ Use date and time scalar functions
ƒ Use the CONCAT operator

© Copyright IBM Corporation 2007

Selecting Calculated Values

I need a list containing
EMPNO, SALARY, COMM,
and SALARY + COMM
for employees whose salary
is less than $20000,
ordered by employee number

SELECT

EMPNO, SALARY, COMM,
SALARY + COMM
FROM
EMPLOYEE
WHERE
SALARY < 20000
ORDER BY EMPNO

EMPNO

SALARY


COMM

000210
000250
000260
000290
000300
000310
000320

18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00

1462.00

1534.00
1380.00
1227.00
1420.00
1272.00
1596.00

© Copyright IBM Corporation 2007

19732.00
20714.00
18630.00
16567.00
19170.00
17172.00
21546.00

Naming Result Columns
SELECT
FROM

WHERE
ORDER BY

EMPNO, SALARY, COMM, SALARY + COMM AS INCOME
EMPLOYEE
SALARY < 20000
EMPNO

EMPNO

SALARY

COMM

INCOME

000210
000250
000260
000290

000300
000310
000320

18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00

1462.00
1534.00
1380.00
1227.00
1420.00
1272.00
1596.00


19732.00
20714.00
18630.00
16567.00
19170.00
17172.00
21546.00

© Copyright IBM Corporation 2007

Substitution of NULL Values
I need a listing containing
department names and the
employee number of its manager,
sorted by department name.

SELECT DEPTNAME
, COALESCE (MGRNO, 'UNKNOWN')
AS MANAGER
FROM

DEPARTMENT
ORDER BY DEPTNAME

DEPTNAME
ADMINISTRATION SYSTEMS
DEVELOPMENT CENTER
INFORMATION CENTER
MANUFACTURING SYSTEMS
OPERATIONS
PLANNING
SOFTWARE SUPPORT
SPIFFY COMPUTER SERVICE DIV.
SUPPORT SERVICES

MANAGER
000070
UNKNOWN
000030
000060
000090

000020
000100
000010
000050

© Copyright IBM Corporation 2007

Arithmetic with NULL Values
I need a list of the total income
(salary and commission).
In the total, assume unknown
commissions to be zero.

SELECT EMPNO, SALARY, COMM,
SALARY + COMM
AS "TOTAL INCOME"
FROM EMPLOYEE
EMPNO
000210
000260

000290
000300
...
EMPNO
000210
000260
000290
000300
...

SALARY
18270.00
17250.00
15340.00
17750.00
...

SELECT EMPNO, SALARY, COMM,
SALARY +
COALESCE (COMM, 0)

AS "TOTAL INCOME"
FROM EMPLOYEE

SALARY
18270.00
17250.00
15340.00
17750.00
...

COMM TOTAL INCOME
1462.00
19732.00
1227.00
16567.00
...
...
© Copyright IBM Corporation 2007

COMM

1462.00
1227.00
...

TOTAL INCOME
19732.00
17250.00
16567.00
17750.00
...

Calculated Values
SELECT
FROM
WHERE
ORDER BY

EMPNO
000210
000250
000260
000290
000300
000310
000320

EMPNO, SALARY, SALARY * 1.0375
EMPLOYEE
SALARY < 20000
EMPNO

SALARY
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00

18955.125000
19899.250000
17896.875000
15915.250000
18415.625000
16496.250000
20698.125000

© Copyright IBM Corporation 2007

Decimal Representation of a Value
SELECT

EMPNO, SALARY,
DECIMAL (SALARY * 1.0375, 8, 2)
FROM
EMPLOYEE
WHERE
SALARY < 20000
ORDER BY EMPNO

EMPNO
000210
000250
000260
000290
000300
000310
000320

SALARY
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00

18955.12
19899.25
17896.87
15915.25
18415.62
16496.25
20698.12

© Copyright IBM Corporation 2007

Decimal Values - Truncation and Rounding
SELECT
FROM
WHERE
ORDER BY

EMPNO, SALARY,
DECIMAL (SALARY * 1.0375 + 0.005, 8, 2)
EMPLOYEE
SALARY < 20000
EMPNO

EMPNO
000210
000250
000260
000290
000300
000310
000320

SALARY
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00

18955.13
19899.25
17896.88
15915.25
18415.63
16496.25
20698.13

© Copyright IBM Corporation 2007

Condition on Calculated Values
SELECT
FROM
WHERE
ORDER BY

EMPNO, COMM, SALARY, (COMM/SALARY) * 100
EMPLOYEE
(COMM/SALARY) * 100 > 8
EMPNO

EMPNO

COMM

SALARY

000140
000210
000240
000330

2274.00
1462.00
2301.00
2030.00

28420.00
18270.00
28760.00
25370.00

© Copyright IBM Corporation 2007

8.001400
8.002100
8.000600
8.001500

Date and Time
ƒ DATE, TIME, TIMESTAMP data internally stored as
packed decimal, without sign
DataType

Internal Format

Internal Length

DATE

yyyymmdd

4 bytes

TIME

hhmmss

3 bytes

TIMESTAMP

yyyymmddhhmmssnnnnnn

10 bytes

ƒ Program uses an external format, that is,
Format

Time Format

Length

ISO

hh.mm.ss

8 bytes yyyy-mm-dd 10 bytes

USA

hh:mm AM

8 bytes mm/dd/yyyy

hh:mm PM

8 bytes

Date Format Length
10 bytes

EUR

hh.mm.ss

dd.mm.yyyy

JIS

hh:mm:ss

8 bytes yyyy-mm-dd 10 bytes

LOCAL

???

???

???

TIMESTAMP DATA: yyyy-mm-dd-hh.mm.ss.nnnnnn
© Copyright IBM Corporation 2007

10 bytes
???
26 bytes

CHAR Function
ƒ CHAR controls the external format of date / time data
SELECT CHAR (TIMECOL, USA),

CHAR (TIMECOL, ISO)...

03:30 PM

© Copyright IBM Corporation 2007

15.30.00

Comparison with Dates
SELECT
FROM
WHERE
ORDER BY

EMPNO, LASTNAME, BIRTHDATE
EMPLOYEE
BIRTHDATE >= '1955-01-01'
BIRTHDATE

EMPNO

LASTNAME

BIRTHDATE

000160
000100

PIANKA
SPENCER

1955-04-12
1956-12-18

© Copyright IBM Corporation 2007

DATE / TIME Arithmetic
ƒ Subtraction only

time - time Æ time duration (decimal (6,0))
date – date Æ date duration (decimal (8,0))
timestamp – timestamp Æ timestamp duration
(decimal (20,6))

ƒ Labeled durations: YEARS, MONTHS, DAYS,
HOURS, MINUTES, SECONDS, MICROSECONDS
time + labeled duration Æ time
date + labeled duration Æ date
timestamp + duration Æ timestamp

© Copyright IBM Corporation 2007

Subtraction of Dates
I need a listing containing the ages
of all employees 72 years old or
more, sorted by age in descending
sequence.

SELECT

EMPNO, LASTNAME, CURRENT_DATE BIRTHDATE AS DIFFER
FROM
EMPLOYEE
WHERE
CURRENT_DATE - BIRTHDATE >= 720000
ORDER BY DIFFER DESC

EMPNO

LASTNAME

DIFFER

000130
000050
000340
000110
000310
000320

QUINTANA
GEYER
GOUNOT
LUCCHESSI
SETRIGHT
MEHTA

790727.
790727.
781126.
750607.
740021.
720901.
© Copyright IBM Corporation 2007

Date / Time Scalar Functions
ƒ DAY, MONTH, YEAR, HOUR, MINUTE, SECOND,
MICROSECOND, DATE, TIME
Extract portions of a date, time, timestamp, or duration

ƒ DAYS - Converts a date to the number of days since
12/31/0000
DAYS(date_1) – DAYS(date_2) gives the number of days
between date_1 and date_2

© Copyright IBM Corporation 2007

Date Scalar Functions
SELECT

FROM
WHERE
ORDER BY

LASTNAME, FIRSTNME,
CURRENT_DATE - BIRTHDATE AS AGE,
YEAR(CURRENT_DATE - BIRTHDATE) AS YEARS,
MONTH(CURRENT_DATE - BIRTHDATE) AS MONTHS,
DAY(CURRENT_DATE - BIRTHDATE) AS DAYS
EMPLOYEE
YEAR(CURRENT_DATE - BIRTHDATE) >= 72
AGE DESC, LASTNAME

LASTNAME

FIRSTNME

GEYER
QUINTANA
GOUNOT
LUCCHESSI
SETRIGHT
MEHTA

JOHN
DOLORES
JASON
VINCENZO
MAUDE
RAMLAL

AGE

YEARS

MONTHS

DAYS

79
79
78
75
74
72

7
7
11
6
0
9

27
27
26
7
21
1

790727.
790727.
781126.
750607.
740021.
720901.

© Copyright IBM Corporation 2007

DATE Arithmetic (1 of 2)
SELECT

PROJNO,
DAYS(PRENDATE) - DAYS(PRSTDATE) AS DAYS
FROM
PROJECT
WHERE
DAYS(PRENDATE) - DAYS(PRSTDATE)