Raằng buộc so sánh năm trong sql năm 2024
CodeLearn is an online platform that helps users to learn, practice coding skills and join the online coding contests. Show
LinksLearning Training Fights InformationAbout Us Terms of Use HelpHelp Discussion Powered by CodeLearn © 2024. All Rights Reserved. rev 2/5/2024 5:31:56 PM Chúng ta đã cùng nhau đi qua phần 1 trong chuỗi series “Tài liệu tự học SQL” về chủ đề giới thiệu SQL và tổng quan SQL cho người mới. Tiếp nối series này, hãy cùng DATAPOT tìm hiểu cụ thể hơn về các kiểu dữ liệu trong SQL thường dùng, cách vận dụng các hàm xử lý dữ liệu sao cho hiệu quả hơn nhé. Nếu bạn nào chưa kịp đọc qua phần 1, hãy ấn ngay tại đây để nắm bắt nội dung từ bài viết đầu tiên luôn nào! Mục lục Cách xem thuộc tính của cột (Column properties)Tên cộtTên của cột đã chọn. Kiểu dữ liệuHiện thị kiểu dữ liệu của cột đã chọn. Chỉ mục (Index – IX)Chỉ mục dùng để truy vấn nhanh hơn, giúp giảm số lượng trang dữ liệu cần được đọc để truy vấn dữ liệu trong một câu lệnh SQL. Một số các ràng buộc (Constraints) được ứng dụng vào các cột hoặc các bảng
Là các cột không có giá trị không tồn tại (NULL VALUE).
Tất cả các giá trị trong cột đều khác nhau.
Khóa chính là sự kết hợp của giá trị không tồn tại (NULL VALUE) và giá trị duy nhất (Unique). Tồn tại duy nhất một khóa chính trong một bảng dữ liệu.
Khóa ngoại là một hoặc nhiều cột trong bảng mà chứa giá trị tham chiếu liên kết với với khóa chính của bảng khác. Khóa chính và khóa ngoại sẽ được nêu trong chapter 3 của textbook này.
Đảm bảo giá trị trong cột thỏa mãn các điều kiện nhất định.
Đặt một giá trị mặc định cho cột nếu cột không có giá trị nào được chỉ định.
Giúp truy vấn dữ liệu nhanh chóng hơn. Kiểu dữ liệu trong SQL Server (Data type)Một số kiểu dữ liệu thường gặp:Dữ liệu dạng số.Dữ liệu dạng số xấp xỉ
Dữ liệu dạng số chính xác
p là tổng chữ số. s là số chữ số sau số thập phân.
p là tổng chữ số. s là số chữ số thập phân. Giải thích câu lệnh truy vấn:
CAST(243.87989 AS DECIMAL(6, 3)): Chuyển 243.87989 về DECIMAL có tổng 6 chữ số và 3 số thập phân. CAST(243.87989 AS NUMERIC(6, 3)): Chuyển 243.87989 về NUMERIC có tổng 6 chữ số và 3 số thập phân.
![A white rectangular box with black text Description automatically generated with medium confidence](https://https://i0.wp.com/datapot.vn/wp-content/uploads/2023/12/a-white-rectangular-box-with-black-text-descripti.png) Dữ liệu dạng ký tựDữ liệu dạng chuỗi ký tự
Dữ liệu dạng chuỗi nhị phân
Dữ liệu dạng ký tự UnicodeN được viết ở đầu mỗi định dạng cho phép lưu trữ ký tự Unicode.
Dữ liệu dạng ngày & giờ![A white text with black text Description automatically generated](https://https://i0.wp.com/datapot.vn/wp-content/uploads/2023/12/a-white-text-with-black-text-description-automati-3.png) Trạng thái NULL của dữ liệuNULL là dữ liệu không xác định hoặc dữ liệu không có sẵn, NULL không được coi là giá trị. Bất cứ một phép toán nào thực hiện với NULL đều sẽ trả ra NULL. Khi lấy NULL để so sánh với các toán tử như “>”, “<”, “=”, kết quả sẽ trả về kết quả false. Giải thích câu lệnh truy vấn: NULL là trạng thái đáng chú ý của dữ liệu do nó có thể gây ra sai lệnh trong tính toán. Sử dụng * kết hợp giữa NULL và giá trị nhất định sẽ trả ra NULL. Sử dụng toán tử + kết hợp giữa NULL và giá trị nhất định sẽ trả ra NULL.Bạn có thể kiểm tra kiểu dữ liệu trong bảng bằng cách ấn chuột vào thư mục Columns, bạn sẽ thấy định dạng dữ liệu được lưu trữ ở bên góc tay trái. Hoặc bạn có thể sử dụng cú pháp sau để kiểm tra kiểu dữ liệu: SELECT Col_name, … FROM INFORMATION_SCHEMA.COLUMNS Để để kiểm tra kiểu dữ liệu trong bảng SalesOrderHeader thuộc bộ dữ liệu AdventureworksFULL. Ta sử dụng câu truy vấn sau:Giải thích câu lệnh truy vấn:
Ta có thể thấy:
Các hàm làm việc tương ứng kiểu dữ liệuCác hàm chuyển đổi kiểu dữ liệuMột số loại kiểu hàm chuyển đổi dữ liệu chính trong SQL. Trong quá trình truy vấn dữ liệu, bạn sẽ thường xuyên phải update kiểu dữ liệu (Data types). Dưới đây là một số hàm giúp chuyển đổi kiểu dữ liệu:Hàm chuyển đổi kiểu dữ liệu
Hàm cho phép chuyển đổi từ một kiểu dữ liệu sang một kiểu dữ liệu khác. Cú pháp của hàm CAST: CAST(Col/Expression AS Data type)
Tương tự như hàm CAST, hàm CONVERT dùng để chuyển đổi từ một kiểu dữ liệu sang một kiểu dữ liệu khác. Tuy nhiên, hàm CONVERT hỗ trợ nhiều kiểu dữ liệu khác nhau (Binary; XML;…), chuyển định dạng ngày tháng. Cú pháp của hàm CONVERT: CONVERT(target_data_type, expression, style)
Giải thích câu lệnh truy vấn: CONVERT(VARCHAR, GETDATE(), 101):
Tuy nhiên, việc chuyển kiểu dữ liệu của cột ProductNumber thành định dạng INT bị lỗi. Vì vậy, hàm CAST() trả về lỗi truy vấn. Trong khi đó, vẫn với ví dụ trên, ta sử dụng hàm TRY_CAST: Giải thích câu lệnh truy vấn:
Tuy nhiên, việc chuyển kiểu dữ liệu của cột ProductNumber (Dạng Varchar) thành định dạng INT là không thể. Vì vậy, hàm TRY_CAST() trả về NULL, thay vì báo lỗi như hàm CAST thông thường. d. Hàm TRY_CONVERT Tương tự như hàm CONVERT, TRY_CONVERT cho phép chuyển đổi từ một kiểu dữ liệu sang một kiểu dữ liệu khác. Tuy nhiên, khi chuyển đổi không thành công, hàm TRY_CONVERT trả về NULL thay vì lỗi như hàm CAST. Cú pháp hàm TRY_CONVERT: TRY_CONVERT(expression AS data_type)
Có thể thấy, hàm TRY_CONVERT trả về NULL khi chuyển đổi giá trị không thành công. Sau đây là một số tham số về định dạng chỉ ngày, thời gian, ngày&giờ phổ biến:
![A table with text on it Description automatically generated](https://https://i0.wp.com/datapot.vn/wp-content/uploads/2023/12/a-table-with-text-on-it-description-automatically.png)
![A table with text and numbers Description automatically generated](https://https://i0.wp.com/datapot.vn/wp-content/uploads/2023/12/a-table-with-text-and-numbers-description-automat.png) Xử lý dữ liệu dạng chuỗi
CONCAT(string1, string2, …)
Ví dụ: Từ bảng dữ liệu SalesLT.Customer thuộc bộ dữ liệu adventureworks, truy vấn các cột FirstName, LastName và kết hợp 2 cột trên lưu dưới tên FullName bằng hàm CONCAT và toán tử “+”. Hàm CONCAT và toán tử “+” được sử dụng để kết hợp 2 cột FirstName, LastName với nhau. b. Hàm CONCAT_WS Tương tự như hàm CONCAT, hàm CONCAT_WS sẽ kết hợp nhiều chuỗi bằng cách sử dụng một phân tách thành một chuỗi duy nhất. Ngoài ra, khi kết hợp các cột có NULL, hàm CONCAT_WS sẽ vấn kết hợp chuỗi và bỏ qua NULL. Cú pháp của hàm CONCAT_WS:CONCAT_WS(separator, col_1, col_2, …)
Ví dụ: Từ bảng dữ liệu SalesLT.Customer, truy vấn các cột Title, FirstName, LastName và kết hợp 3 cột trên lưu dưới tên FullName bằng hàm CONCAT_WS. Thay vì phải điền các chuỗi phân tách như hàm CONCAT, bạn chỉ cần điều chuỗi phân tách 1 lần trong hàm CONCAT_WS. c. Hàm LEN Hàm LEN được sử dụng dùng để tính độ dài của chuỗi ký tự. Cú pháp của hàm LEN:LEN(string)
Ví dụ: Từ bảng dữ liệu SalesLT.Customer thuộc bộ dữ liệu adventureworks, truy vấn các cột FirstName và tính độ dài của tên khách hàng. Hàm LEN tính toán độ dài của tên khách hàng. d. Hàm LEFT & RIGHT Hàm LEFT dùng để trích xuất một số ký tự cụ thể từ bên trái của ký tự. Hàm RIGHT dùng để trích xuất một số ký tự cụ thể từ bên phải của ký tự. Cú pháp của hàm LEFT và hàm RIGHT:LEFT/RIGHT(string, num_characters)
Ví dụ: Truy vấn 2 ký tự từ bên trái và 2 ký tự bên phải của từ ‘Hello’. Giải thích câu lệnh truy vấn.
LEFT(): trả về 2 ký tự từ bên trái qua phải của từ ‘Hello’. RIGHT(): trả về 2 ký tự từ bên phải qua trái của từ ‘Hello’. e. Hàm REPLICATE Hàm REPLICATE được sử dụng để lặp lại một chuỗi với số lần nhất định. Cú pháp hàm REPLICATE: REPLICATE(string, n_times)
Ví dụ: Từ bảng SalesLT. Customer thuộc bộ dữ liệu adventureworks, truy vấn LastName và LastName2 lặp lại thông tin LastName 2 lần. Hàm REPLICATE lặp lại giá trị của cột LastName 2 lần. f. Hàm REPLACE Hàm REPLACE thay thế một chuỗi ký tự trong chuỗi ký tự gốc. Cú pháp hàm REPLACE:REPLACE(string, to_replace, replacement)
Ví dụ: Từ bảng SalesLT.Product thuộc bộ dữ liệu adventureworks, truy vấn các cột Name, ProductNumber, và thay thế ký tự ‘BK’ trong cột ProductNumber thành ký tự ‘XX’. g. Hàm UPPER Hàm UPPER cho phép chuyển đổi chữ cái sang dạng viết hoa Cú pháp của hàm UPPER:UPPER(nvarchar)
LOWER(nvarchar) Ví dụ: Bạn muốn viết hoa FirstName, viết thường Middle Name. Giải thích câu lệnh truy vấn: Hàm UPPER chuyển đổi FirstName thành chữ cái viết hoa. Hàm LOWER chuyển đổi MiddleName thành chữ cái viết thường. i. Hàm CHARINDEX: CHARINDEX được dùng để tìm kiếm chuỗi ký tự trong chuỗi ký tự gốc và trả về vị trí đầu tiên của chuỗi khớp nếu có. Ngược lại, nếu không tìm thấy chuỗi ký tự con trong chuỗi ký tự gốc, hàm CHARINDEX sẽ trả về NULL. Cú pháp của CHARINDEX:CHARINDEX(substr, str, [start_location])
Ví dụ: Đếm ra có bao nhiêu ký tự đứng trước ‘@’ của cột EmailAddress. Giải thích câu lệnh truy vấn: Hàm CHARINDEX đếm vị trí của ‘@’ trong chuỗi ký tự EmailAddress. k. Hàm SUBSTRING Hàm SUBSTRING dùng để trích xuất một phần của chuỗi ký tự từ một vị trí bắt đầu và độ dài cụ thể. Cú pháp của SUBSTRING:SUBSTRING(input_string, start_position, length)
Ví dụ: Truy vấn tên người bán hàng từ cột SalesPerson bằng SUBSTRING. Xử lý và thao tác với dữ liệu dạng ngày (Date manipulations)Xử lý và thao tác với dữ liệu dạng ngày là một trong những việc phổ biến khi truy vấn dữ liệu. Hàm DATEDIFF Hàm DATEDIFF được sử dụng để tính khoảng thời gian giữa hai thời điểm thời gian. Hàm này trả về một giá trị số nguyên, đại diện cho sự khác biệt giữa các ngày hoặc thời điểm dựa trên một đơn vị thời gian cụ thể (Ví dụ: ngày, tháng, năm). Cú pháp của DATEDIFF DATEDIFF(date_part, start_date, end_date)
Ví dụ: Từ bảng SalesOderHear thuộc bộ dữ liệu adventureworks, truy vấn SalesOrderID, OrderDate, ShipDate, Khoảng cách thời gian Order và Shipping theo Ngày/Tuần/Tháng. Giải thích câu lệnh truy vấn:
DATEDIFF() tính khoảng thời gian giữa thời điểm OrderDate và ShipDate theo mốc ngày/tuần/tháng. Xử lý các dữ liệu không tồn tại hoặc dữ liệu không có sẵn (NULL)Sau đây ta cùng tìm hiểu một số các hàm xử lý NULL. a. Hàm ISNULL Hàm ISNULL trả về một giá trị được chỉ định nếu biểu thức là NULL. Nếu biểu thức không phải là NULL, hàm này trả về chính biểu thức đó. Cú pháp hàm ISNULL: ISNULL(expression, value)
Ví dụ: Từ bảng SalesLT.Product thuộc bộ dữ liệu adventureworks, sử dụng ISNULL để so sánh kết quả trong cột Color. Nếu cột Color có NULL, trả về tên NoColor. b. Hàm COALESCE Hàm COALESCE là được sử dụng để trả về giá trị đầu tiên không phải NULL từ một danh sách các biểu thức. Cú pháp hàm COALESCE:COALESCE(expression1, expression2, …)
Ví dụ: Từ bảng Customer, truy vấn cột Class, ProductLine và ProductClass được tạo nên bởi cột Class và ProductLine. Với tên không xác định hoặc không có sẵn (NULL), hiển thị với giá trị ‘Unknown’. Giải thích câu lệnh truy vấn: Hàng 198 có biểu thức thứ 1 không NULL nên COALESCE trả về giá trị biểu thức đầu tiên L. Hàng 200 có biểu thức thứ 1, 2 NULL nên COALESCE trả về ‘Unknown’. Hàng 210 có biểu thức thứ 1 không NULL nên COALESCE trả về giá trị biểu thức thứ 1 H. Hàng 212 có biểu thức thứ 2 không NULL nên COALESCE trả về giá trị biểu thức thứ 2 S. c. Hàm NULLIF Hàm NULLIF được sử dụng để so sánh hai giá trị và trả về NULL nếu chúng bằng nhau. Cú pháp hàm NULLIF: NULLIF(expression1, expression2)
Ví dụ: so sánh giữa giá trị 5 và 5, 10 và 5 bằng hàm NULLIFF Giải thích câu lệnh truy vấn: Hàm NULLIF trả về NULL khi 2 giá trị so sánh bằng nhau. Hàm NULLIF trả về giá trị đầu tiên khi 2 giá trị so sánh khác nhau.Nhóm hàm định dạng dữ liệu (Formatting data)Định dạng ngày (Date formats)Hầu hết cơ sở dữ liệu sẽ có hàm (Function) để giúp định dạng ngày. Cần thống nhất định dạng ngày (Date formats) để đảm bảo tính nhất quán trong cơ sở dữ liệu. Ví dụ: Định dạng ngày của Việt Nam và Mỹ:
Vì vậy, cần hiểu cơ sở dữ liệu của mình đang lưu trữ dưới định dạng ngày (Date formats) nào để đảm bảo tính nhất quán trong việc lưu trữ. Hàm FORMAT: Hàm FORMAT được dùng để định dạng lại giá trị ngày tháng hoặc số dưới dạng chuỗi theo các định dạng tùy chỉnh. Cú pháp của FORMAT: FORMAT(col_name, format, [ culture])
Ví dụ: Format 24/09/2023 theo định dạng ngày, tháng, năm. Format giá trị 20.3 dưới dạng phần trăm và format 24/09/2023 theo định dạng ngày Giải thích câu lệnh truy vấn: FORMAT(2023-09-24, ‘dd/MM/yyyy’) giá trị ngày tháng năm được định dạng lại dưới format ngày/tháng/năm. FORMAT(20.3, ‘P’) giá trị 20.3 được định dạng dưới format phần trăm. FORMAT(2023-09-24, ‘dd/MM/yyyy’, ‘fr-FR’) giá trị ngày tháng năm được định dạng lại dưới format ngày/tháng/năm, không bao gồm giờ, phút, giây sử dụng mã vùng là ‘fr-FR’ (tiếng Pháp – Pháp).Làm tròn số (Rounding)Một số hàm làm tròn số trong trong SQL:
Ví dụ: Từ bảng Product thuộc bộ dữ liệu adventureworks, truy vấn Name, StandardCost và sử dụng các hàm làm tròn với StandardCost (ROUND, CEILING, FLOOR). Giải thích câu lệnh truy vấn:
Trên đây chỉ là một số hàm, định dạng kiểu dữ liệu phổ biến, các bạn có thể tham khảo thêm các hàm, định dạng kiểu dữ liệu khác tại tài liệu của Microsoft. |