You are on page 1of 32

Phần 4

Các hàm SQL


1. Tổng quan về hàm trong SQL
Hàm SQL là một đặc điểm làm tăng khả năng sử dụng
câu lệnh SQL. Hàm SQL có thể nhận nhiều tham số vào
và trả về chỉ một giá trị.

Hàm SQL có thể phân ra làm hai loại:


• Hàm tác động trên từng dòng dữ liệu: Giá trị trả về
tương ứng với từng dữ liệu đầu vào tại mỗi dòng dữ
liệu.
• Hàm tác động trên nhóm các dòng dữ liệu: Giá trị trả
vê tương ứng với các phép thao tác trên nhóm dữ
liệu trả về.
2. Hàm SQL thao tác trên từng dòng dữ liệu
a. Các hàm thao tác trên kiểu dữ liệu số
Hàm SQL Diễn giải

ROUND(n[,m]) Cho giá trị làm tròn của n (đến cấp m, mặc nhiên m=0)

TRUNC(n[,m]) Cho giá trị n lấy m chữ số tính từ chấm thập phân

CEIL(n) Cho số nguyên nhỏ nhất lớn hơn hoặc bằng n

FLOOR(n) Cho số nguyên lớn nhất bằng hoặc nhỏ hơn n

POWER(m,n) Cho lũy thừa bậc n của m

SQRT(n) Cho căn bậc 2 của n, n>=0


2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
a. Các hàm thao tác trên kiểu dữ liệu số (tt)
Hàm SQL Diễn giải

SIGN(n) Cho dấu của n.


n<0 có SIGN(n)= -1
n=0 có SIGN(n)= 0
n>0 có SIGN(n)= 1
ABS(n) Cho giá trị tuyệt đối của n

MOD(m,n) Cho phần dư của phép chia m cho n

LOG(m,n) Cho logarit cơ số m của n

SIN(n) Trả về sin, cos, tang của n (n tính bằng radian)


COS(n)
TAN(n)
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
a. Các hàm thao tác trên kiểu dữ liệu số (tt)
• Ví dụ hàm ROUND(n*,m+)

SELECT ROUND(4.923,1),
ROUND(4.923),
ROUND(4.923,-1),
ROUND(4.923,2)
FROM DUAL;

Các giá trị trả về lần lượt là: 4.9, 5, 0, 4.92


2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
a. Các hàm thao tác trên kiểu dữ liệu số (tt)
• Ví dụ hàm TRUNC(n*,m+)
SELECT TRUNC (4.923,1),
TRUNC (4.923),
TRUNC (4.923,-1),
TRUNC (4.923,2)
FROM DUAL;
Các giá trị trả về lần lượt là: 4.9, 4, 0, 4.92

• Ví dụ hàm SIGN(n)
SELECT a.amt, SIGN(a.amt)
FROM rtxnbal a
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
a. Các hàm thao tác trên kiểu dữ liệu số (tt)
• Ví dụ hàm ABS(n)
SELECT r.acctnbr, r.rtxnnbr, r.tranamt, ABS(r.tranamt)
FROM rtxn r;

• Ví dụ hàm SIGN(n)
SELECT a.amt, SIGN(a.amt)
FROM rtxnbal a
2. Hàm SQL thao tác trên từng dòng dữ liệu
b. Các hàm thao tác trên kiểu dữ liệu ký tự
Hàm SQL Diễn giải

CONCAT(char1, Cho kết hợp của 2 chuỗi ký tự, tương tự như sử dụng toán tử ||
char2)
INITCAP(char) Cho chuỗi với ký tự đầu các từ là ký tự
hoa
LOWER(char) Cho chuỗi ký tự viết thường (không viết
hoa)
LPAD(char1, n Cho chuỗi ký tự có chiều dài bằng n. Nếu chuỗi char1 ngắn hơn n
[,char2]) thì thêm vào bên trái chuỗi char2 cho đủ n ký tự. Nếu chuỗi char1
dài hơn n thì giữ lại n ký từ tính từ trái sang
LTRIM(char1, n Bỏ các ký tự trống bên trái
[,char2])
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)

• Ví dụ hàm CONCAT(char1, char2)


SELECT CONCAT(p.firstname, p.lastname)
FROM pers p
WHERE p.persnbr = 3;

• Ví dụ hàm CONCAT(char1, char2)


SELECT CONCAT(p.firstname, ' ' || p.lastname)
FROM pers p
WHERE p.persnbr = 3
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)

• Ví dụ hàm INITCAP(char)
SELECT INITCAP ('nguyen huu hong duc')
FROM dual;

• Ví dụ hàm LOWER(char)
SELECT LOWER ('NGUYEN HUU HONG DUC')
FROM dual;

• Ví dụ hàm LPAD(char1, n [,char2])


SELECT LPAD('100', 6, '0')
FROM dual;
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)

• Ví dụ hàm RTRIM(char1, n *,char2+)


SELECT LTRIM(' Nguyen Huu Hong Duc')
FROM dual;

• Ví dụ hàm LTRIM(char1, n *,char2+)


SELECT 'Nguyen Huu Hong ' || ' Duc', 'Nguyen Huu Hong
' || LTRIM(' Duc')
FROM dual;
2. Hàm SQL thao tác trên từng dòng dữ liệu
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)
Hàm SQL Diễn giải

REPLACE(char,s Thay tất cả các chuỗi search_string có trong chuỗi char bằng chuỗi
earch_string[,re replacement_string.
placem
ent_string])
RPAD(char1, n Giống LPAD(char1, n *,char2+) nhưng căn phải.
[,char2])
RTRIM(char1, n Bỏ các ký tự trống bên phải
[,char2])
SUBSTR(char, m Cho chuỗi con của chuỗi char lấy từ vị trí m vế phải n ký tự, nếu
[,n]) không chỉ n thì lấy cho đến cuối chuỗi
UPPER(char) Cho chuỗi chữ hoa của chuỗi char
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)

• Ví dụ hàm REPLACE(char,search_string[,replacement_string])
SELECT 'Nguyen Huu Hong Duc', REPLACE('Nguyen Huu
Hong Duc','Duc','Minh')
FROM dual;

• Ví dụ hàm RPAD(char1, n *,char2+)


SELECT RPAD('Nguyen Huu Hong Duc', 25, '*')
FROM dual;
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)

• Ví dụ hàm RTRIM(char1, n *,char2+)


SELECT RTRIM('Nguyen Huu Hong Duc ')
FROM dual;

• Ví dụ hàm RTRIM(char1, n *,char2+)


SELECT 'Nguyen Huu Hong ' || ' Duc', RTRIM('Nguyen
Huu Hong ') || ' Duc'
FROM dual;
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)

• Ví dụ hàm SUBSTR(char, m *,n+)


SELECT SUBSTR('Nguyen Huu Hong Duc', 8,3)
FROM dual;

• Ví dụ hàm UPPER(char)
SELECT UPPER('Nguyen Huu Hong Duc')
FROM dual;
2. Hàm SQL thao tác trên từng dòng dữ liệu
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)
Hàm SQL Diễn giải

INSTR(char1, Tìm vị trí chuỗi char2 trong chuỗi


char2 [,n[,m]]) char1 bắt đầu từ vị trí n, lần xuất hiện
thứ m.
LENGTH(char) Cho chiều dài của chuỗi char
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu ký tự (tt)

• Ví dụ hàm INSTR(char1, char2 *,n*,m++)


SELECT INSTR('Nguyen Huu Hong Duc','Duc',1,1)
FROM dual;

• Ví dụ hàm LENGTH(char)
SELECT LENGTH ('Nguyen Huu Hong Duc')
FROM dual;
2. Hàm SQL thao tác trên từng dòng dữ liệu
c. Các hàm thao tác trên kiểu dữ liệu thời gian
Hàm SQL Diễn giải

MONTHS_BET Cho biết só tháng giữa ngày d1 và d2.


WEEN(d1, d2)
ADD_MONTHS( Thêm n tháng vào ngày d
d,n)
NEXT_DAY(d, Cho ngày tiếp theo ngày d có thứ chỉ bởi char.
char )
LAST_DAY(d) Cho ngày cuối cùng trong tháng chỉ bởi d.
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu thời gian (tt)

• Ví dụ hàm MONTHS_BETWEEN(d1, d2)


SELECT a.effdate, a.datemat,
MONTHS_BETWEEN(a.effdate, a.datemat)
FROM acctdatemathist a
WHERE a.acctnbr = 163799;

• Ví dụ hàm ADD_MONTHS(d,n)
SELECT sysdate, ADD_MONTHS(SYSDATE, 3)
FROM dual;
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
b. Các hàm thao tác trên kiểu dữ liệu thời gian (tt)

• Ví dụ hàm NEXT_DAY(d, char )


SELECT SYSDATE, NEXT_DAY(SYSDATE, 'MONDAY')
FROM dual;

• Ví dụ hàm LAST_DAY(d)
SELECT SYSDATE, LAST_DAY(SYSDATE)
FROM dual;
2. Hàm SQL thao tác trên từng dòng dữ liệu
d. Một số hàm có thể áp dụng trên kiểu dữ liệu
thời gian
Hàm SQL Diễn giải

ROUND(date1) Làm tròn ngày date1 tính từ thời điểm giữa trưa 12:00 AM của
ngày date1
ROUND(date1,’ Nếu date1 nằm trong nửa tháng đầu trả về ngày đầu tiên của
MONTH’) tháng, ngược lại sẽ trả về ngày đầu tiên của tháng sau.
ROUND(date1,’ Nếu date1 nằm trong nửa năm đầu trả về ngày đầu tiên của
YEAR’) tháng, ngược lại sẽ trả về ngày đầu tiên của năm sau.
TRUNC(date1, Trả về ngày đầu tiên của tháng chứa date1
’MONTH’)
TRUNC(date1, Trả về ngày đầu tiên của năm chứa date1
’YEAR’)
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
d. Một số hàm có thể áp dụng trên kiểu dữ liệu thời
gian (tt)
• Ví dụ hàm ROUND(date1)
SELECT a.datelastmaint, ROUND(a.datelastmaint)
FROM acctdatemathist a
WHERE a.acctnbr = 163799;

• Ví dụ hàm ROUND(date1,’MONTH’)
SELECT a.datelastmaint, ROUND(a.datelastmaint,
'MONTH')
FROM acctdatemathist a
WHERE a.acctnbr = 163799;
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
d. Một số hàm có thể áp dụng trên kiểu dữ liệu thời
gian (tt)
• Ví dụ hàm ROUND(date1, ‘YEAR’)
SELECT a.datelastmaint, ROUND(a.datelastmaint, 'YEAR')
FROM acctdatemathist a
WHERE a.acctnbr = 163799;

• Ví dụ hàm TRUNC(date1, ’MONTH’)


SELECT a.datelastmaint, TRUNC(a.datelastmaint,
'MONTH')
FROM acctdatemathist a
WHERE a.acctnbr = 163799;
2. Hàm SQL thao tác trên từng dòng dữ liệu
e. Các hàm chuyển đổi kiểu
Hàm SQL Diễn giải

TO_CHAR(num Chuyển kiểu số và ngày về kiểu ký tự.


ber|date,
‘fmt’)
TO_NUMBER(c Chuyển ký tự có nội dung số sang số
har)
TO_DATE(‘chsr’,’ Chuyển ký tự sang kiểu ngày với định dạng đặt trong
fmt’) fmt.
DECODE(EXPR, So sánh biểu thức expr với giá trị search nếu đúng trả về giá trị
SEARCH1, result nếu không trả về giá trị default.
RESULT1,
SEARCH2,
RESULT2,
DEFAULT)
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
d. Các hàm chuyển đổi kiểu

• Ví dụ hàm TO_CHAR(number|date, ‘fmt’)


SELECT a.datelastmaint, to_char(a.datelastmaint,
'dd/mm/yyyy')
FROM acctdatemathist a
WHERE a.acctnbr = 114569;

• Ví dụ hàm TO_NUMBER(char)
SELECT p.taxid, to_number(p.taxid)
FROM pers p
WHERE p.persnbr = 16058;
2. Hàm SQL thao tác trên từng dòng dữ liệu (tt)
d. Các hàm chuyển đổi kiểu

• Ví dụ hàm TO_DATE(‘chsr’,’fmt’)
SELECT '17/09/2012', to_date('17/09/2012',
'dd/mm/yyyy')
FROM dual;

• Ví dụ hàm DECODE(EXPR, SEARCH1, RESULT1, SEARCH2,


RESULT2, DEFAULT)
SELECT r.tranamt, DECODE(SIGN(r.tranamt), 1, 'GHI CO', -
1, 'GHI NO', 'Gia tri mac dinh') LOAIGIAODICH
FROM RTXN r;
3. Hàm SQL thao tác trên tập hợp
a. Các hàm tác động trên nhóm
Hàm SQL Diễn giải

AVG([DISTINCT/ Giá trị trung bình của n,không kể trị null


ALL] n)
COUNT([DISTIN Số row có expr khác null
CT/ALL] expr)
MAX([DISTINCT Giá trị lớn nhất của expr
/ALL] expr)
MIN([DISTINCT/ Giá trị nhỏ nhất của expr
ALL] expr)
SUM([DISTINCT Tổng của của n không kể trị null
/ALL] n)
3. Hàm SQL thao tác trên tập hợp
a. Các hàm tác động trên nhóm (tt)
Có 2 cách để dùng các các hàm này

• Tác động trên toàn bộ các dòng dữ liệu của câu lệnh truy vấn

• Tác động trên một nhóm dữ liệu cùng tính chất của câu lệnh
truy vấn. Cùng tính chất được chỉ bởi mệnh đề:
– [GROUP BY expr]
[HAVING condition]
3. Hàm SQL thao tác trên tập hợp
a. Các hàm tác động trên nhóm (tt)
Ví dụ: Tác động trên toàn bộ các dòng dữ liệu của câu lệnh truy
vấn:

SELECT SUM(r.tranamt)
FROM rtxn r
WHERE r.acctnbr = 106329
AND r.rtxntypcd = 'DEP'
AND r.origpostdate >= to_date('09092011', 'ddmmyyyy')
AND r.origpostdate <= to_Date('21092011', 'ddmmyyyy');
3. Hàm SQL thao tác trên tập hợp
a. Các hàm tác động trên nhóm (tt)
Ví dụ: Tác động trên một nhóm dữ liệu cùng tính chất của câu
lệnh truy vấn:

SELECT SUM(r.tranamt)
FROM rtxn r
WHERE r.acctnbr = 106329
AND r.rtxntypcd = 'DEP'
AND r.origpostdate >= to_date('09092011', 'ddmmyyyy')
AND r.origpostdate <= to_Date('21092011', 'ddmmyyyy');
Tổng kết
• Tổng quan về hàm trong SQL
• Hàm SQL thao tác trên từng dòng dữ liệu
– Các hàm thao tác trên kiểu dữ liệu số
– Các hàm thao tác trên kiểu dữ liệu ký tự
– Các hàm thao tác trên kiểu dữ liệu thời gian
– Một số hàm bổ sung có thể áp dụng trên kiểu dữ
liệu thời gian
– Các hàm chuyển đổi kiểu
• Hàm SQL thao tác trên tập hợp
– Các hàm tác động trên nhóm
QUESTIONS?

You might also like