2012-08-16 29 views
11

Làm cách nào để bạn thực hiện câu lệnh LIKE trên cột DateTime kiểu dữ liệu trong SQL Server?Tuyên bố LIKE của SQL về Loại ngày giờ

Nếu tôi chạy SQL sau nó sẽ trả về cho tôi tất cả các ngày với năm 2009 trong.

SELECT * FROM MyTable where CheckDate LIKE '%2009%' 

Tuy nhiên, nếu tôi muốn tất cả các tháng mười, tháng mười một & ngày Tháng Mười Hai tôi mong đợi để có thể thực hiện như sau:

SELECT * FROM MyTable where CheckDate LIKE '%2009-1%' 

Nhưng điều này không trả lại gì cho tôi!

Tôi đang cung cấp cho người dùng tùy chọn bộ lọc nơi họ nhập chuỗi ngày và khi họ nhập tôi lọc dữ liệu. Vì vậy, nếu họ nhập '20', tôi muốn trả lại tất cả các ngày có '20' trong ngày (vì vậy đây có thể là tất cả các ngày tháng 2012 hoặc giá trị ngày tháng như 06/20/1999)

Ai đó có thể trợ giúp ?

Tôi đang sử dụng SQL Server 2008.

Xin cảm ơn trước.

+0

Cảm ơn trả lời của bạn, tôi đã cập nhật các công việc chi tiết hơn về những gì tôi đang cố gắng để làm – Sun

+0

Bạn đã kiểm tra rằng người dùng của bạn muốn có một cơ sở như vậy? Tôi chưa bao giờ muốn tìm "tất cả các hoạt động đã xảy ra vào ngày thứ 10 của bất kỳ tháng nào, hoặc trong tháng mười, hoặc trong năm 2010". –

Trả lời

20

Bạn có thể sử dụng hàm DATEPART để trích xuất các phần của ngày. Nó cũng nên truy vấn của bạn rõ ràng hơn về những gì bạn đang tìm kiếm để đạt được:

SELECT * FROM MyTable 
where DATEPART(year,CheckDate)=2009 and 
     DATEPART(month,CheckDate) between 10 and 12 

(Ngoài ra còn có tên đặc biệt chức năng, chẳng hạn như MONTHYEAR, nhưng tôi thích DATEPART cho nhất quán vì nó có thể truy cập tất cả các thành phần của một số datetime)

Bạn nên cố gắng tránh suy nghĩ về datetime s vì có bất kỳ loại định dạng chuỗi nào. Xử lý chúng như là chuỗi là một trong những nguồn lỗi lớn nhất mà chúng ta gặp phải.

2

Bạn có thể sử dụng một cái gì đó như thế này:

SELECT * 
FROM MyTable 
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01'; 
+1

Và khi bạn đang ở đó - hãy thử sử dụng định dạng ngày ** ngôn ngữ ** độc lập - như '20091001' - hoạt động cho ** tất cả ** phiên bản ngôn ngữ của SQL Server .... –

+3

Nguy hiểm. Trong khi truy vấn ban đầu buộc chuyển đổi 'datetime' thành chuỗi (và do đó sẽ luôn tạo ra giá trị được định dạng nhất quán), điều này buộc chuyển đổi từ chuỗi thành' datetime' và tùy thuộc vào cài đặt vùng, thực tế có thể truy vấn bất kỳ thứ gì vào hoặc sau ngày 10 tháng 1 năm 2009 –

5

Nếu bạn cần phải sử dụng Like điều hành (đối với một số lý do nào) bạn phải chuyển đổi cột DateTime thành một varchar.

SELECT * 
FROM MyTable 
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%' 
Các vấn đề liên quan