Trong SQL có 2 loại hàm xử lý. 1 là Single-Row Functions. Các hàm này sẽ xử lý trên từng dòng và trả về mỗi kết quả cho 1 dòng. Loại thứ 2 là Multiple-Row Functions hay còn gọi là Group Functions. Loại hàm này sẽ xử lý trên nhiều dòng và trả về 1 kết quả. Trong bài này chúng ta sẽ tìm hiểu về các Single-Row Functions. Các hàm này có thể nhận tham số đầu vào, xử lý tính toán, format hiển thị hay chuyển đổi kiểu dữ liệu và trả ra kết quả cho mỗi dòng. Các hàm này có thể sử dụng trong mệnh đề SELECT, WHERE, ORDER BY và cũng có thể lồng nhau.

Trong bài này chúng ta sẽ tìm hiểu các functions theo các nhóm như sau:

– Character functions

– Number functions

– Date functions

– Conversion functions

– General functions

 

Character functions – Nhóm hàm xử lý chuỗi ký tự

 

– Hàm LOWER(column|expression): chuyển chuỗi về chữ in thường

 

– Hàm UPPER(column|expression): chuyển chuỗi về chữ IN HOA

 

– Hàm INITCAP(column|expression): chuyển chuỗi về dạng Viết Hoa Đầu Từ

 

 

– Hàm CONCAT(column 1|expression 1, column 2|expression 2…): hàm nối chuỗi, tương tự toán tử ||

 

– Hàm SUBSTR(column|expression, m [,n]): cắt chuỗi con từ vị trí m, lấy n ký tự. Nếu m âm thì tính từ cuối chuỗi. Nếu không có n thì lấy từ vị trí m đến cuối chuỗi. Chú ý rằng chuỗi bắt đầu tính từ 1.

 

 

– Hàm LENGTH(column|expression): trả về độ dài chuỗi

 

– Hàm INSTR(column|expression, ‘string’ [,m] [,n]): tìm kiếm chuỗi con trong chuỗi lớn. m chỉ định vị trí bắt đầu tìm, n chỉ định vị trí tìm thấy thứ mấy sẽ được xuất ra. Mặc định m, n là 1, nghĩa là tìm từ đầu và đưa ra vị trí đầu tiên tìm thấy chuỗi con. Nếu không tìm thấy sẽ trả về 0.

 

 

– Hàm LPAD(column|expression, n, ‘string’): “đắp” string vào bên trái nội dung column|expression sao cho column|expression đủ n ký tự

 

– Hàm RPAD(column|expression, n, ‘string’): “đắp” string vào bên phải nội dung column|expression sao cho column|expression đủ n ký tự

 

 

– Hàm TRIM(leading|trailing|both, trim_character FROM trim_source): cắt ký tự trim_character khỏi chuỗi trim_source ở đầu hay cuối chuỗi

 

– Hàm REPLACE(text, search_string, replacement string): tìm kiếm và thay thế nội dung trong text

 

 

Number functions – Nhóm hàm xử lý số

 

– Hàm ROUND(column|expression, n): làm tròn số đến n số bên phải dấu thập phân. Nếu bỏ qua n thì làm tròn đến số nguyên. Nếu n âm thì làm tròn số bên trái dấu thập phân

 

 

– Hàm TRUNC(column|expression, n): cắt số chỉ còn n số bên phải dấu thập phân. Nếu n âm thì cắt về phía bên trái dấu thập phân.

 

 

– Hàm MOD(m, n): tính số dư m/n

 

 

[ideabox]

DUAL là table ảo thuộc sở hữu của user SYS, có thể truy cập bởi mọi user. Nó chỉ có 1 column là DUMMY và 1 giá trị là X. Table này thường dùng trong mệnh đề FROM khi tính toán, lấy 1 giá trị nào đó không nằm trong các user table -> cần 1 table tạm để tạo thành câu lệnh SELECT tối thiểu ( có SELECT và FROM).

[/ideabox]

Date functions – Nhóm hàm xử lý ngày tháng

 

Oracle thông thường lưu trữ ngày giờ theo dạng: century, year, month, day, hours, minutes, seconds. Mặc định định dạng hiển thị là DD-MON-RR. Oracle hỗ trợ ngày tháng từ 1/1/4712 BC đến 31/12/9999 AD. Cho phép lưu ngày tháng thế kỷ 21 vào thế kỷ 20 hay ngược lại nhờ sử dụng 2 chữ số cuối của năm:

– Nếu 2 chữ số cuối của năm hiện tại là 00 – 49:

Nếu 2 chữ số cuối của năm trong giá trị ngày tháng là 00 – 49: năm trong thế kỷ hiện tại (RR, YY)
Nếu 2 chữ số cuối của năm trong giá trị ngày tháng là 50 – 99: năm ở thế kỷ trước đó (RR), hiện tại (YY)

– Nếu 2 chữ số cuối của năm hiện tại là 50 – 99:

Nếu 2 chữ số cuối của năm trong giá trị ngày tháng là 00 – 49: năm trong thế kỷ tiếp theo (RR), hiện tại (YY)
Nếu 2 chữ số cuối của năm trong giá trị ngày tháng là 50 – 99: năm ở thế kỷ hiện tại (RR, YY)

VD:

Current Year Given Date Interpreted (RR) Interpreted (YY)
1994 27-OCT-95 1995 1995
1994 27-OCT-17 2017 1917
2001 27-OCT-17 2017 2017
2048 27-OCT-52 1952 2052
2051 27-OCT-47 2147 2047

 

Ngày tháng trong Oracle được lưu theo dạng:

CENTURY YEAR MONTH DAY HOUR MINUTE SECOND
       19    87      06   17   17      10      43

Để xem ngày giờ hiện tại trong hệ thống database, có thể thực hiện câu lệnh sau:

 

 

Về ý nghĩa, thực ra ngày tháng cũng chỉ là 1 con số. Ta có thể dùng các phép tính như:
– ngày + 1 số = ngày
– ngày – 1 số = ngày
– ngày – ngày = số (khoảng cách giữa 2 ngày)
– ngày + số/24 = ngày (cộng thêm giờ)

 

 

– Hàm MONTHS_BETWEEN(date1, date2): tính số tháng giữa 2 thời điểm

 

– Hàm ADD_MONTHS(date, n): cộng thêm n tháng vào thời điểm date

 

– Hàm NEXT_DAY(date, ‘char’): tìm ngày tiếp theo sau ngày date và là ngày thứ ‘char’ trong tuần

 

– Hàm LAST_DAY(date): tìm ngày cuối tháng

 

 

– Hàm ROUND(date [,format]): làm tròn đến đơn vị format, nếu không có format thì làm tròn đến ngày gần nhất

 

 

– Hàm TRUNC(date, [,format]): trả về ngày đầu tiên theo đơn vị format, nếu không có format thì trả về đầu ngày. Nói dễ hiểu thì nếu không có format sẽ trả về thời điểm đầu ngày (0 giờ 0 phút 0 giây), nếu cắt về tuần thì trả về đầu tuần, cắt về tháng thì trả về đầu tháng, cắt về quý thì trả về đầu quý…