Các hàm hệ thống và xử lý chuỗi
Nội dung:
- Các hàm hệ thống Sql
- Xử lý chuỗi
1. Các hàm chuyển đổi kiểu dữ liệu
INFO
- Khi làm việc với các biểu thức chứa nhiều kiểu dữ liệu khác nhau, phải thực hiện chuyển đổi giữa các kiểu dữ liệu.
- Hai loại chuyển đổi kiểu dữ liệu
Chuyển đổi ngầm (do SQL server tự thực hiện)
Chuyển đổi tường minh (sử dụng các hàm thư viện)
- Chuyển đổi ngầm
INFO
- Gán giá trị cho một cột có kiểu dữ liệu khác với giá trị được gán.
- Biểu thức tính toán có sự tham gia cuả nhiều loại dữ liệu khác nhau (SQL chuyển kiểu có độ ưu tiên thấp sang kiểu có độ ưu tiên cao hơn)
WARNING
- Lập trình viên cần nắm chuyển đổi ngầm tránh lỗi
- Việc chuyển đổi xả ra tự động.
Thứ tự ưu tiên của các kiểu dữ liệu phổ biến trong SQL Server
Xét ví dụ: SELECT 100 * .5 => Kết quả có kiểu dữ liệu gì?
Kết là 50.0 vì .5 có độ ưu tiên cao hơn**
Xét ví dụ: SELECT 'Today is ' + GETDATE()=>Kết quả kiểu dữ liệu là gì?
Không thể chuyển “Today is” thành kiểu DateTime
- Chuyển đổi tường minh
INFO
- Chuyển dữ liệu có kiểu dữ liệu với độ ưu tiên cao hơn về kiểu dữ liệu có độ ưu tiên thấp hơn.
- Sử dụng hàm CAST hoặc CONVERT để thực hiện phép chuyển đổi tường minh.
-Ví dụ: chuyển kiểu có độ ưu tiên cao DateTime về kiểu có độ ưu tiên thấp hơn varchar: SELECT 'Today is ' + cast(GETDATE() as varchar)
- Sử dụng hàm chuyển đổi dữ liệu Hàm CAST
TIP
- Hàm CAST dùng để chuyển đổi tường minh, hay ép kiểu, một biểu thức từ kiểu dữ liệu này sang kiểu dữ liệu khác
Một số ví dụ
Sử dụng hàm chuyển đổi dữ liệu Hàm CONVERT
TIP
- Dùng để chuyển đổi tường minh một biểu thức từ kiểu dữ liệu này sang kiểu dữ liệu khác
- Khi chuyển đổi sang kiểu dữ liệu kí tự và cần định dạng hiển thị cho dữ liệu.
- Tham số định dạng: định dạng cho các giá trị ngày/giờ, số thực, tiền tệ khi chuyển đổi sang kiểu kí tự
Một số ví dụ
So sánh giữa Cast và CONVERT:
SELECT 'Today''s date is ' + CAST(GETDATE() as varchar)
SELECT 'Today''s date is ' + CONVERT(VARCHAR, GETDATE(), 101)
2. Các hàm toán học
- PI: trả về số Pi
- SQRT: tính căn bậc 2, trả về dữ liệu kiểu float - SELECT SQRT(25) => 5
- SQUARE: bình phương - SELECT SQUARE(3)=> 9
- CEILING và FLOOR
- ROUND: làm tròn giá trị theo vị trí thập phân xác định
- ABS: Lấy giá trị tuyệt đối
Ví dụ lương trung bình của nv là 31000, thống kê mức độ chênh lệch lương của các nv so với lương trung bình => không quan tâm số âm hay dương
3. Các hàm xử lý chuỗi
Làm việc với kiểu dữ liệu chuỗi
- Ví dụ
Hàm CHARINDEX
INFO
- Cú pháp
CHARINDEX(find, search[, start])
Hàm SubString
INFO
- Cú pháp
SubString(find, start, length)
Hàm REPLACE
INFO
- Cú pháp
REPLACE(search, find, replace) - REPLACE
Các hàm khác
- Demo các hàm xử lý chuỗi
WARNING
- Vấn đề thường xảy ra với dữ liệu chuỗi
Sắp thứ tự: Khi sắp xếp một cột kiểu chuỗi chứa số, bạn có thể nhận được kết quả không mong đợi
Phân tách kí tự: Nếu chuỗi gồm hai hay nhiều thành phần, bạn có thể phân tách chuỗi thành những thành phần độc lập.
TIP
- Giải quyết vấn đề
Để tránh điều đó, bạn chuyển đổi cột kiểu chuỗi thành giá trị số trong mệnh đề ORDER BY
Sử dụng hàm CHARINDEX để định vị những ký tự phân tách. Sau đó, dùng hàm LEFT, RIGHT, SUBSTRING và LEN để trích ra những thành phần độc lập
- Ví dụ
Bảng NhanVien được sắp xếp bởi cột MaNV khi có dùng Cast
Các hàm ngày tháng năm
GETDATE trả về ngày tháng năm hiện tại (bao gồm ngày,tháng năm,giờ, phút,giây)
DATENAME: truy cập tới các thành phần liên quan ngày tháng
WARNING
- Trong SQL Server dữ liệu ngày/giờ được xử lý dưới định dạng tháng/ngày/năm
- Để sử dụng định dạng ngày/giờ dưới dạng ngày/tháng/năm. Cần chú ý:
Khi sử dụng câu lệnh INSERT phải truyền dữ liệu ngày/giờ theo định dạng tháng/ngày/năm
Khi truy vấn dữ liệu, để lấy về giá trị có định dạng ngày/tháng/năm có thể sử dụng hàm CONVERT với mã định dạng 3 hoặc 103