2015-10-07 46 views
5

Tôi làm cách nào để có thể truy xuất tất cả các ngày từ '2015-10-02' đến '2015-11-02' trong SQLite? (String type) Kết quả sẽ như thế nào:Cách tạo tất cả các ngày giữa hai ngày

'2015-10-03' 
'2015-10-04' 
'2015-10-05' 
... 
'2015-11-01' 

Đây là không một câu hỏi về SELECT * FROM myTable where myDate <= '2015-01-01' AND myDate >= '2015-01-31'. Đây là không phải về việc chọn tất cả hiện có các bản ghi có trường giữa hai ngày. Tôi chỉ muốn lấy tất cả các giá trị ngày tháng có thể có giữa hai ngày. Tôi muốn sử dụng chúng để truy vấn số lượng bản ghi theo ngày.

Date    Count 
'2015-01-01'  19 
'2015-01-02'  10 
'2015-01-03'  0 
... 
+1

Bản sao có thể có của [ngày so sánh SQLite] (http://stackoverflow.com/questions/13091000/sqlite-compare-dates) –

+0

http://stackoverflow.com/questions/7812986/easiest-way- để-populate-a-temp-table-với-ngày-giữa-và-bao gồm-2-date-par có vẻ có liên quan, nhưng tôi không lên trên phương ngữ có thể khác biệt giữa SQL Server và SQLite. –

+0

Vui lòng xem lại câu trả lời được đưa ra bên dưới, cảm ơn. –

Trả lời

9

này là không thể mà không có một đệ quy common table expression, được giới thiệu vào SQLite 3.8.3:

WITH RECURSIVE dates(date) AS (
    VALUES('2015-10-03') 
    UNION ALL 
    SELECT date(date, '+1 day') 
    FROM dates 
    WHERE date < '2015-11-01' 
) 
SELECT date FROM dates; 
+0

Đây là điều tôi đang tìm kiếm. Cảm ơn rất nhiều – Andiana

0

Nếu cột ngày của bạn đã là một loại cập nhật với các định dạng YYYY-MM-DD sau đó bạn có thể sử dụng các truy vấn sau đây:

SELECT date_field AS Date, COUNT(date_field) 
FROM table 
WHERE (date_field BETWEEN '2015-10-02' AND '2015-11-02') 
GROUP BY date_field 

Nếu cột ngày thực sự là một chuỗi, sau đó bạn có thể sử dụng strftime() chức năng:

SELECT date_field AS Date, COUNT(date_field) 
FROM table 
WHERE strftime('%Y-%m-%d', date_field) BETWEEN '2015-10-02' AND '2015-11-02' 
GROUP BY date_field 
+0

Điều này chỉ chọn * các bản ghi hiện có trong một bảng * phù hợp tiêu chí, trong khi câu hỏi dường như được yêu cầu * điền một tập hợp tất cả các ngày có thể cách nhau với khoảng thời gian thích hợp * phù hợp tiêu chí. –

+0

Tôi đã trả lời _before_ bản chỉnh sửa. Xin vui lòng loại bỏ các downvote. Tôi sẽ cố gắng cập nhật nó, tôi không thể xóa nó. Cô ấy hoàn toàn thay đổi câu hỏi sau khi tôi trả lời. –

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