Hàm trả về một giá trị thông qua tên hàm còn thủ tục thì không. Hàm được sử dụng như là một thành phần của một biểu thức. Hàm có hai loại: Hàm hệ thống và hàm do người dụng định nghĩa Nhóm hàm Configuration (Cấu hình) Nhóm hàm Cursor (Kiểu con trỏ) Nhóm hàm Date and Time Nhóm hàm Mathematical (Toán học) Nhóm hàm Metadata (Siêu dữ liệu) Nhóm hàm Security (Bảo mật) Nhóm hàm String (Chuỗi) Nhóm hàm khác
Trang 1Chương 6: H À M
6.1 Giới thiệu
6.2 Hàm hệ thống
6.3 Hàm do người dùng định nghĩa
Trang 36.2 Hàm hệ thống
6.2.1 Hàm hệ thống trả về giá trị đơn
6.2.2 Hàm trả về giá trị tổng hợp 6.2.3 Hàm trả về khoảng giá trị
Ranking
Trang 46.2.1 Hàm hệ thống trả về giá trị
đơn
• Nhóm hàm Configuration (Cấu hình)
• Nhóm hàm Cursor (Kiểu con trỏ)
• Nhóm hàm Date and Time
• Nhóm hàm Mathematical (Toán học)
• Nhóm hàm Metadata (Siêu dữ liệu)
• Nhóm hàm Security (Bảo mật)
• Nhóm hàm String (Chuỗi)
Trang 5Nhóm hàm Configuration (Cấu
hình)
• Lấy thông tin về cấu hình hiện hành
của SQL Server
Trang 6Group by là Sum, Count,
Avg, Max, Min
Trang 76.2.3 Hàm trả về khoảng giá trị
Ranking
Hàm thuộc nhóm Ranking dùng để kết hợp xếp loại tập kết quả.
Trang 8•Cú pháp của hàm Rank như sau:
Rank() Over ([Partition By <Cột
phân nhóm>] Order By <Cột sắp xếp>
[DESC|ASC])
Trang 9Hàm Rank
•Ví dụ: Hiển thị danh sách điểm thi
lần 1 học phần có mã là Tinvp Trong kết quả trả về có hiển thị thêm cột xếp vị thứ dựa vào điểm thi lần 1
Trang 10Hàm Rank
•Kết quả
Trang 12Hàm Rank
•Kết quả
Trang 13Hàm Dense_Rank
•tương tự hàm Rank, tuy nhiên các
giá trị trên cột vị thứ có giá trị
Rank
Trang 14Hàm Ntile
•Hàm này tương tự hàm Rank, tuy nhiên
các giá trị trên cột vị thứ được giới hạn trong phạm vi chỉ định.
•Hàm NTILE chỉ có tác dụng chia đều số
lượng các bản ghi và đưa vào từng nhóm số.
•Ví dụ:
SELECT DT.MASV, HODEM,TEN,GIOITINH,DIEM,
NTILE(2) OVER (ORDER BY DIEM DESC) AS [VI THU]
FROM DIEMTHI DT INNER JOIN SINHVIEN SV
Trang 15Hàm Ntile
•Sử dụng hàm NTILE cho từng bản ghi
trong một nhóm sẽ đưa ra các xếp loại giống nhau
Trang 16Hàm Row_Number
• Trả về số thứ tự của cho bản ghi
trong tập bản ghi mà phát biểu
SELECT trả về
• Ví dụ:
SELECT DT.MASV, HODEM, TEN,
GIOITINH , DIEM,
Row_Number () OVER (ORDER BY DIEM)
AS [SO MAU TIN]
Trang 176.3 Hàm do người dùng định
nghĩa
6.3.1 Tạo hàm
6.3.2 Thay đổi hàm
Trang 186.3.1 Tạo hàm
6.3.1.1 Tạo hàm trả về giá trị đơn
•Kích nút phải chuột lên mục Scalar -
valued Functions chọn New Scalar - valued
Function, cửa sổ Query xuất hiện cho phép bạn soạn thảo câu lệnh T-SQL để tạo hàm Cú pháp tạo hàm trả về giá trị đơn như sau:
CREATE FUNCTION tên_hàm
Trang 196.3.1.1 Tạo hàm trả về giá trị đơn
Ví dụ 1: Định nghĩa hàm tính thứ trong tuần của một giá trị kiểu ngày
CREATE FUNCTION thu(@ngay DATETIME)
RETURNS NVARCHAR(10)
AS
BEGIN
DECLARE @st NVARCHAR(10) SELECT @st=CASE DATEPART(DW,@ngay)
WHEN 1 THEN N'Chủ nhật' WHEN 2 THEN N'Thứ hai' WHEN 3 THEN N'Thứ ba' WHEN 4 THEN N'Thứ tư' WHEN 5 THEN N'Thứ năm' WHEN 6 THEN N'Thứ sáu' ELSE N'Thứ bảy'
END RETURN (@st) /* Trị trả về của hàm */
Trang 206.3.1.1 Tạo hàm trả về giá trị đơn
•Một hàm khi đã được định nghĩa có
thể sử dụng như các hàm do HQTCSDL
cung cấp (thông thường trước tên hàm, bạn phải chỉ định thêm tên của người
sở hữu hàm)
•Ví dụ: Câu lệnh dưới đây sử dụng
hàm đã được định nghĩa ở ví dụ trước:
SELECT masv, hodem, ten,
dbo.thu(ngaysinh) as Thu,ngaysinh
Trang 216.3.1.2 Tạo hàm trả về dữ liệu kiểu
bảng
•Hàm nội tuyến trả về dữ liệu kiểu
bảng (Inline Table- valued
Trang 226.3.1.2 Tạo hàm trả về dữ liệu kiểu
Trang 236.3.1.2 Tạo hàm trả về dữ liệu kiểu
bảng
•Hàm nội tuyến trả về dữ liệu kiểu
bảng:
Ví dụ: Định nghĩa hàm func_XemSV:
Để biết danh sách các sinh viên khoá
1, bạn sử dụng câu lệnh như sau:
SELECT * FROM dbo.func_XemSV(1)
Trang 246.3.1.2 Tạo hàm trả về dữ liệu kiểu
bảng
•Hàm chứa nhiều lệnh trả về dữ liệu
kiểu bảng (Multi-Statement Table-valued Function ):
Trang 256.3.1.2 Tạo hàm trả về dữ liệu kiểu
bảng
•Hàm chứa nhiều lệnh trả về dữ liệu
kiểu bảng (Multi-Statement Table-valued Function ):
Ví dụ: Định nghĩa hàm func_TongSV
(@khoahoc SMALLINT) như sau:
- Hiển thị makhoa, tenkhoa, tongsosv
- Nếu @khoahoc=0 thì cho biết tổng
số sinh viên hiện có (tất cả các khóa) của mỗi khoa.
- Ngược lại Sẽ cho kết quả thống kê
tổng số sinh viên khoá @khoahoc
của mỗi khoa
Trang 266.3.1.2 Tạo hàm trả về dữ liệu kiểu
bảng
•Hàm chứa nhiều lệnh trả về dữ liệu
kiểu bảng (Multi-Statement
Trang 276.3.2 Thay đổi hàm
• Trong khung Object Explorer, chọn
Database chứa hàm cần sửa đổi,