[ad_1]
tôi phải lấy bản ghi của tất cả các hàng từ ngày 30 đến ngày hôm nay. tôi đã thử cái này nhưng không hiệu quả
Những gì tôi đã thử:
chọn date_time từ dsr_data trong đó date_time >= CONVERT(Varchar(100), DATEADD(DAY,-30,GETDATE()),103) và date_time <= CONVERT(varchar(100), getdate(),103)
Giải pháp 3
SELECT date_time FROM dsr_data WHERE date_time between DATEADD(DAY,-30,GETDATE()) and GETDATE();
Giải pháp 1
Tại sao bạn sử dụng CHUYỂN ĐỔI?
Lý do duy nhất có thể là cùng một lý do khiến nó không hoạt động: bạn đang lưu trữ ngày của mình dưới dạng cột NVARCHAR thay vì DATE, DATETIME hoặc DATETIME2.
Khi bạn so sánh các chuỗi, sự so sánh hoàn toàn dựa trên ký tự khác nhau đầu tiên trong hai chuỗi: và vì bạn đặc biệt chọn định dạng ngày ở định dạng 103, tức là “dd/MM/yyyy” nên sự so sánh sẽ hoàn toàn là rác – ví dụ: năm sẽ được kiểm tra lần cuối, vì vậy ngày 31/01/2017 sẽ trước ngày 31/12/1952 vì việc so sánh sẽ dựa trên chữ số đầu tiên của tháng và ‘0’ nhỏ hơn ‘1’
Thay đổi cơ sở dữ liệu của bạn. Luôn lưu trữ dữ liệu theo kiểu dữ liệu thích hợp: nghĩa là các giá trị số nguyên trong cột INT, thông tin ngày tháng trong cột DATE, DATETIME hoặc DATETIME2, v.v. Nếu không, đây chỉ là vấn đề đầu tiên trong số rất nhiều vấn đề khó chịu, khó chịu đang chờ đợi bạn…
Giải pháp 2
Sử dụng truy vấn dưới đây.
SELECT date_time FROM dsr_data WHERE date_time >= DATEADD(day,-30, getdate()) and date_time <= getdate()
[ad_2]
コメント