Truy vấn ngày tháng trong SQL Server
Show Để công việc của chúng ta thuận tiện hơn, tôi và các bạn hãy cùng nhau tìm hiểu các hàm làm việc với kiểu dữ liệu Ngày tháng/ Thời gian trong SQL. Mục lục 1 Hàm GETDATE Hàm GETDATE trả về ngày giờ lúc thực hiện câu truy vấn. Ví dụ: select getdate() 2 Hàm DAY/ MONTH/ YEAR Hàm DAY trả về ngày của một một giá trị thuộc kiểu datetime. Hàm MONTH trả về tháng của một giá trị thuộc kiểu datetime Hàm YEAR trả về năm của một giá trị thuộc kiểu datetime. Ví dụ: select day(orderdate) as DAYOFORDER, month(orderdate) as MONTHOFORDER, year(orderdate) as YEAROFORDER from orders o inner join customers c on c.cus tomerid = o.customerid where c.customerid = 3 3 Hàm DATEPART Trong quá trình làm việc với các CSDL, đôi lúc ta muốn biết xem một ng ày nào đó thuộc quý mấy trong năm, hay thuộc tuần thứ mấy trong tháng . Hàm DATEPART giúp giải quyết các yêu cầu trên một cách dễ dàng. Cấu trúc hàm DATEPART như sau: DATEPART (yêu_cầu_trích_xuất, giá_trị_trích_xuất) giá_trị_trích_xuất là một giá trị thuộc kiểu datetime. yêu_cầu_trích_xuất: ngày, tháng, năm, quý,…. Khi có một yêu cầu trích xuất nào đó, chúng ta sẽ có các chữ viết tắt tương ứng với các yêu cầu đó. Bảng dưới đây mô tả các yêu chữ viết tắt và các yêu cầu trích xuất tương ứng.
Ví dụ: select datepart(yyyy, orderdate)as YEAROFORDERDATE, datepart(qq, orderdate)as QUARTEROFORDERDATE, datepart(m, orderdate) as MONTHOFORDERDATE, datepart(wk, orderdate) as WEEKOFORDERDATE, datepart(d, orderdate) as DATEOFORDERDATE, datepart(dy, Orderdate), datepart(dw, orderdate) from orders 4 Hàm DATENAME Tương tự hàm DATEPART nhưng hàm DATENAME tr ả về một chuỗi ký tự Ví dụ: select datename(yyyy, orderdate)as YEAROFORDERDATE, datename(qq, orderdate)as QUARTEROFORDER DATE, datename(m, orderdate) as MONTHOFORDERDATE, datename(wk, orderdate) as WEEKOFORDERDATE, datename(d, orderdate) as DATEOFORDERDATE, datename(dy, Orderdate), datename(dw, orderdate) from orders
5. Hàm CAST và CONVERTER Chuyển đổi một giá trị thuộc kiểu dữ liệu này sang một kiểu dữ liệu khác. Hàm CAST và CONVERTER cung cấp cùng một chức năng. Một điểm thuận lợi khi dùng CONVERTER là khi chuyển đổi, hàm này cũng cho phép người dùng sẽ định dạng lại giá tri kết quả theo ý muốn. Cấu trúc hàm CAST và CONVERTER như sau: CAST (biểu_thức/giá_ trị AS kiểu_dữ liệu [độ_dài_kiểu_dữ_liệu ]) CONVERT ( kiểu_dữ liệu [độ_dài_kiểu_dữ_liệu ] , biểu_thức/giá_ trị [ ,kiểu_định_dạng] )
Ví dụ: select CUSTOMERNAME, convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where Customername = 'Le Thi Hoa' and year(getdate()) - year(BIRTHDAY) > 20 Hàm CONVERT và hàm CAST có thể sử dụng kết hợp với nhau để cho kết qua như mong muốn. Ví dụ: select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY) as money),1) as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername
Phần khó khăn nhất khi làm việc với ngày tháng là đảm bảo rằng định dạng của ngày tháng bạn muốn chèn vào phải ăn khớp với định dạng ngày tháng của cột trong cơ sở dữ liệu. Miễn là dữ liệu của bạn chỉ chứa các thông tin ngày tháng, truy vấn của bạn sẽ làm việc như mong đợi. Tuy nhiên, nếu một phần thời gian (giờ phút giây) có liên quan, nó sẽ trở nên phức tạp. Trước khi nói về sự phức tạp của truy vấn ngày tháng, chúng ta sẽ xem thử các hàm quan trọng nhất được xây dựng để làm việc với ngày tháng. Các hàm ngày tháng trong MySQLBảng dưới đây liệt kê tất cả các hàm quan trọng nhất được xây dựng trong MySQL:
Các hàm ngày tháng của SQL ServerBảng dưới đây liệt kê các hàm quan trọng nhất được xây dựng trong SQL Server:
Các kiểu dữ liệu ngày tháng trong SQLMySQL đi kèm với các kiểu dữ liệu sau đây để lưu trữ giá trị ngày hoặc ngày tháng / thời gian trong cơ sở dữ liệu (Y là năm, M là tháng, D là ngày, H là giờ, MI là phút, SS là giây; YYYY là năm được lưu dưới dạng bốn chữ số, YY là năm được lưu dưới dạng hai chữ số; MM là lưu tháng dưới dạng hai chữ số, ví dụ tháng 7 sẽ là 07):
SQL Server đi kèm với các kiểu dữ liệu sau để lưu trữ giá trị ngày tháng hoặc ngày tháng/thời gian trong cơ sở dữ liệu:
Lưu ý: Các kiểu ngày tháng lựa chọn cho cột khi bạn tạo bảng mới trong cơ sở dữ liệu! Để có cái nhìn tổng quan về tất cả các kiểu dữ liệu có thể có, hãy truy cập vào thư mục các kiểu dữ liệu của chúng tôi. SQL làm việc với ngày thángBạn có thể so sánh hai ngày tháng một cách dễ dàng nếu không có thành phần thời gian tham gia! Giả sử chúng ta có bảng “Orders” giống như thế này:
Bây giờ chúng ta muốn chọn bản ghi bới OrderDate là “2008-11-11” từ bảng trên. Chúng ta sử dụng câu lệnh SELECT sau: SELECT * FROM Orders WHERE OrderDate='2008-11-11' Kết quả trả về sẽ trông giống như thế này:
Bây giờ giả sử bảng “Orders” trông giống như thế này (lưu ý là phần gian có trong cột “OrderDate”):
Nếu chúng ta sử dụng cùng câu lệnh SELECT như trên: SELECT * FROM Orders WHERE OrderDate='2008-11-11' Chúng ta sẽ không nhận được kết quả nào. Điều này là bởi câu truy vấn trên chỉ dành cho ngày tháng không có phần thời gian đi kèm. Mẹo: Nếu bạn giữ câu truy vấn của bạn đơn giản và dễ dàng để bao trì, đừng đưa phần thời gian giờ phút giây vào trong ngày tháng của bạn.
|