Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL Chọn 7 ngày qua

WHERE mệnh đề được đặt sai vị trí, nó phải tuân theo các tham chiếu bảng và các hoạt động JOIN.

Một cái gì đó như thế này:

 FROM tartikel p1 
 JOIN tartikelpict p2 
   ON p1.kArtikel = p2.kArtikel 
  AND p2.nNr = 1
WHERE p1.dErstellt >= DATE(NOW()) - INTERVAL 7 DAY
ORDER BY p1.kArtikel DESC

CHỈNH SỬA (thêm ba năm sau)

Về cơ bản, phần trên trả lời câu hỏi "Tôi đã cố gắng thêm mệnh đề WHERE vào truy vấn của mình và bây giờ truy vấn trả lại lỗi, làm cách nào để khắc phục nó?"

Đối với câu hỏi về cách viết điều kiện kiểm tra phạm vi ngày "7 ngày qua" ...

Điều đó thực sự phụ thuộc vào việc diễn giải thông số kỹ thuật, kiểu dữ liệu của cột trong bảng là gì (DATE hoặc DATETIME) và dữ liệu nào có sẵn ... những gì sẽ được trả về.

Tóm lại:cách tiếp cận chung là xác định "bắt đầu" cho phạm vi ngày / giờ và "kết thúc" của phạm vi đó và tham chiếu các phạm vi đó trong một truy vấn. Hãy xem xét điều gì đó dễ dàng hơn ... tất cả các hàng cho "ngày hôm qua".

Nếu cột của chúng tôi là loại DATE. Trước khi kết hợp một biểu thức vào một truy vấn, chúng ta có thể kiểm tra nó trong một lệnh SELECT đơn giản

 SELECT DATE(NOW()) + INTERVAL -1 DAY 

và xác minh kết quả trả về là những gì chúng tôi mong đợi. Sau đó, chúng ta có thể sử dụng cùng một biểu thức đó trong mệnh đề WHERE, so sánh nó với cột DATE như sau:

 WHERE datecol = DATE(NOW()) + INTERVAL -1 DAY

Đối với cột DATETIME hoặc TIMESTAMP, chúng ta có thể sử dụng >=< so sánh bất bình đẳng để chỉ định một phạm vi

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -1 DAY
   AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY

Đối với "7 ngày qua", chúng tôi cần biết liệu điều đó có nghĩa là từ thời điểm này ngay bây giờ, 7 ngày trở lại ... ví dụ:7 * 24 giờ qua, bao gồm cả thành phần thời gian trong so sánh, ...

 WHERE datetimecol >= NOW() + INTERVAL -7 DAY
   AND datetimecol <  NOW() + INTERVAL  0 DAY

bảy ngày cuối cùng, không bao gồm hôm nay

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -7 DAY
   AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY

hoặc sáu ngày qua cộng cho đến hôm nay ...

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -6 DAY
   AND datetimecol <  NOW()       + INTERVAL  0 DAY

Tôi khuyên bạn nên thử nghiệm các biểu thức ở phía bên phải trong câu lệnh SELECT, chúng ta có thể sử dụng một biến do người dùng xác định thay cho NOW () để thử nghiệm, không bị ràng buộc với những gì NOW () trả về để chúng ta có thể kiểm tra các đường biên, qua tuần / tháng ranh giới / năm, v.v.

SET @clock = '2017-11-17 11:47:47' ;

SELECT DATE(@clock)
     , DATE(@clock) + INTERVAL -7 DAY 
     , @clock + INTERVAL -6 DAY 

Khi chúng ta có các biểu thức trả về giá trị hoạt động cho "bắt đầu" và "kết thúc" cho trường hợp sử dụng cụ thể của chúng ta, nghĩa là "7 ngày qua", chúng ta có thể sử dụng các biểu thức đó trong các so sánh phạm vi trong mệnh đề WHERE.

(Một số nhà phát triển thích sử dụng DATE_ADDDATE_SUB thay cho + INTERVAL val DAY/HOUR/MINUTE/MONTH/YEAR cú pháp.

Và MySQL cung cấp một số chức năng thuận tiện để làm việc với các kiểu dữ liệu DATE, DATETIME và TIMESTAMP ... DATE, LAST_DAY,

Một số nhà phát triển thích tính toán bắt đầu và kết thúc trong mã khác và cung cấp các ký tự chuỗi trong truy vấn SQL, sao cho truy vấn được gửi đến cơ sở dữ liệu là

  WHERE datetimecol >= '2017-11-10 00:00'
    AND datetimecol <  '2017-11-17 00:00'

Và cách tiếp cận đó cũng hoạt động. (Sở thích của tôi là chuyển các ký tự chuỗi đó thành DATETIME một cách rõ ràng, bằng CAST, CONVERT hoặc chỉ với thủ thuật + INTERVAL ...

  WHERE datetimecol >= '2017-11-10 00:00' + INTERVAL 0 SECOND
    AND datetimecol <  '2017-11-17 00:00' + INTERVAL 0 SECOND

Tất cả những điều trên đều giả định rằng chúng tôi đang lưu trữ "ngày tháng" ở các kiểu dữ liệu DATE, DATETIME và / hoặc TIMESTAMP thích hợp và không lưu trữ chúng dưới dạng chuỗi ở nhiều định dạng, ví dụ:'dd/mm/yyyy' , m/d/yyyy , ngày tháng julian, hoặc ở các định dạng không chính tắc hoặc ở dạng số giây kể từ đầu kỷ nguyên, câu trả lời này sẽ cần dài hơn nhiều.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thêm ngày vào ngày trong MySQL

  2. Mysql so khớp ... so với đơn giản như% term%

  3. câu lệnh đã chuẩn bị sẵn trong đó giá trị nằm trong mảng

  4. Kết nối JDBC hết thời gian chờ không thể kết nối lại

  5. Truy vấn MySQL - Bản ghi từ hôm nay đến 30 ngày trước