2016-03-15 18 views
6

Tôi đang cố gắng tạo báo cáo nhận bản ghi từ cơ sở dữ liệu SQL Server, nơi ngày gửi là ngày hôm nay.Làm thế nào để so sánh chỉ phần ngày khi ngày giao hàng là ngày

Tôi đã thử

select * from (tablename) 
where delivery_date = getdate() 

Mặc dù điều đó không cho tôi bất kỳ lỗi nào, nó đã không cho tôi bất cứ hồ sơ một trong hai.

Tôi giả định đó là vì tất cả các ngày giống như:

2016-03-15 00:00:00.000 

Có lẽ, tôi cần phải cắt ngắn ngày để loại bỏ dấu thời gian nằm và sau đó thử?

+0

Bạn có thể cast 'getdate()' thành 'date' - điều này sẽ cắt bỏ thời gian. Hoặc sử dụng phạm vi ngày nếu 'delivery_date' được lưu trữ có thể chứa thời gian quá (nếu nó là như vậy tôi muốn đề nghị sử dụng phương pháp này thay vì đúc cả hai mặt để' ngày'). –

Trả lời

11

Bạn có thể thử một truy vấn như dưới đây

select * from (tablename) 
where CAST(delivery_date as date) = CAST(getdate() as date) 

Ngoài ra nếu tất cả các ngày giao hàng có thời gian một phần như 00:00:00.000 chắc chắn sau đó

select * from (tablename) 
where delivery_date = CAST(getdate() as date) 

sẽ làm việc tốt.

+1

Nếu tất cả ngày phân phối không có phần thời gian, thì hãy cân nhắc việc thay đổi loại cột thành DATE để tiết kiệm một số không gian. –

+0

THANK YOU rất nhiều Dhruv. Tôi đã thử mã này và nó hoạt động. Badi Mehrbaani aapki. Cám ơn bạn một lần nữa. – user1777929

+0

@ user1777929 Nhận xét của bạn đã làm cho ngày của tôi :) – DhruvJoshi

3

Nếu DELIVERY_DATE luôn là nửa đêm (00:00:00.000), sau đó so sánh nó như thế này:

select * from (tablename) 
where delivery_date = datediff(d, 0, getdate()) 

Sử dụng datediff như thế này là một cách nhanh chóng để cắt xén một phần thời gian của một giá trị datetime.

0

Yo cần xóa phần thời gian của trường delivery_date VÀ giá trị GETDATE().

SELECT * 
FROM (tablename) 
WHERE DATEADD(dd, DATEDIFF(dd, 0, delivery_date), 0) = DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0) 
1

Tôi chỉ cần tạo 2 thông số. Một cho StartTime và một cho EndTime và sử dụng chúng trong truy vấn của tôi.

DECLARE @StartTime DATETIME, 
     @EndTime DATETIME 

SET @StartTime = DATEDIFF(d,0,GETDATE()) 
SET @EndTime = DATEADD(d,1,@StartTime) 

SELECT * 
FROM [tablename] 
WHERE delivery_date >= @StartTime 
     AND delivery_date < @EndTime 
0

Hãy thử điều này:

DECLARE @Today DATETIME SET @ Hôm nay = CONVERT (ngày, getdate())

select * from (tablename) nơi DELIVERY_DATE = @Today