7

Tôi có câu hỏi nhỏ về SQL Server: làm thế nào để có được trước thông tin 30 ngày kể từ bảng dữ liệu nàyNhận hồ sơ cuối cùng 30 ngày kể từ ngày hôm nay tại SQL Server

mẫu:

Product:

Pdate 
---------- 
2014-11-20 
2014-12-12 
2014-11-10 
2014-12-13 
2014-10-12 
2014-11-15 
2014-11-14 
2014-11-16 
2015-01-18 

Dựa trên dữ liệu bảng này, tôi muốn đầu ra như sau

pdate 
------- 
2014-11-20 
2014-12-12 
2014-12-13 
2014-11-16 

I tri đã chỉnh sửa truy vấn này

SELECT * 
FROM product 
WHERE pdate >= DATEADD(day, -30, getdate()). 

nhưng giờ đây đưa ra kết quả chính xác. Vui lòng cho tôi biết cách giải quyết vấn đề này trong SQL Server

+0

vấn đề với truy vấn của bạn là gì? Cách '2015-01-18' xuất hiện. –

+0

không cần phải xua tan bản ghi 2015-01-18 này không phải là 30 ngày qua cho đến hôm nay. – user3457912

Trả lời

3

Bạn có thể sử dụng DateDiff cho việc này. Mệnh đề where trong truy vấn của bạn sẽ trông như thế:

where DATEDIFF(day,pdate,getdate()) < 31 
19

Thêm điều kiện thêm một trong where clause

SELECT * FROM product 
WHERE pdate >= DATEADD(day,-30, getdate()) 
and pdate <= getdate() 

Hoặc sử dụng DateDiff

SELECT * FROM product 
WHERE DATEDIFF(day,pdate,getdate()) between 0 and 30 
+0

thanks.give logic làm việc tốt.chúng tôi có thể cung cấp từ 0 đến 29 thời gian của nó mất từ ​​hôm nay đến 30 ngày qua. – user3457912

+0

@ user3457912 - Không phải từ 0 đến 30. đối với ngày hôm nay, dateiff sẽ là 0 –

0

này nên hoạt động tốt !!!

SELECT * FROM product WHERE pdate BETWEEN datetime('now', '-30 days') AND datetime('now', 'localtime') 
0

Tôi không biết lý do tại sao tất cả những câu trả lời phức tạp đang ở đây nhưng đây là những gì tôi sẽ làm

where pdate >= CURRENT_TIMESTAMP -30 

HOẶC WHERE CAST(PDATE AS DATE) >= GETDATE() -30

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