2012-07-10 32 views
8

Tôi có một câu hỏi cơ bản:Làm thế nào để tìm ra số ngày giữa hai ngày

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 

Tôi muốn thêm cột khác để đầu ra ... cho phép gọi nó là "khác biệt" để tìm hiểu số lượng ngày giữa 'dtcreated' và 'dtlastupdated' Vì vậy, ví dụ nếu bản ghi 1 có dtcreated 1/1/11 và dtlastupdated là 1/1/12 cột "Difference" sẽ là "365".

Điều này có thể được thực hiện trong truy vấn không?

+2

Googling "Cách tìm số ngày giữa hai truy vấn ngày" tìm thấy nhiều ý nghĩa của câu trả lời. Đó là những gì bạn nên thử đầu tiên. –

+1

@Jeremy, không phải là tốt để có câu trả lời ở đây sao? Google trong thực tế chỉ mang lại cho tôi ở đây. –

+0

@AdrianMouat hãy nhớ rằng đây là một năm sau khi câu hỏi được hỏi. StackOverflow không tận hưởng kết quả tìm kiếm được xếp hạng cao hơn trên Google, vì vậy đây là kết quả tự nhiên ... bất kể thực tế là nó không cần thiết. –

Trả lời

23

Bạn sẽ sử dụng DATEDIFF:

declare @start datetime 
declare @end datetime 

set @start = '2011-01-01' 
set @end = '2012-01-01' 

select DATEDIFF(d, @start, @end) 

results = 365 

như vậy cho truy vấn của bạn:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(d, dtCreated, dtLastUpdated) as Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 
+0

Tôi nhận được một lỗi về điều này ... SQL Thực thi Lỗi chuyển đổi không thành công khi chuyển đổi datetime từ chuỗi ký tự – Shmewnix

+0

@Shmewnix datatype cho 'dtCreated' và' dtLastUpdated' là gì? Nếu họ không phải là datetime, sau đó bạn sẽ cần phải chuyển đổi chúng. – Taryn

+0

bạn sẽ chuyển đổi chúng ở đâu? Trong câu lệnh chọn? hoặc trong tuyên bố ngày tháng? – Shmewnix

4

Để tìm số ngày giữa hai ngày, bạn sử dụng:

DATEDIFF (d, startdate , enddate) 
1

tôi sẽ sử dụng hàm DATE_DIFF để cung cấp giá trị này như sau:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(d, dtLastUpdated, dtCreated) AS Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 

EDIT: NẾU sử dụng MySQL bạn bỏ qua 'd' để lại cho bạn

DATEDIFF(dtLastUpdated, dtCreated) AS Difference 
1

Nếu bạn đang sử dụng MySQL có chức năng DATEDIFF đó tính toán những ngày giữa hai ngày:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(dtLastUpdated, dtCreated) as Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 
0
DATEDIFF(d, 'Start Date', 'End Date') 

làm điều đó

Các vấn đề liên quan