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

SQL, Chọn giữa ngày / giờ

Trước hết, không sử dụng Group dưới dạng tên cột. Nó là một từ dành riêng trong mọi tiêu chuẩn SQL. Tôi đã đổi tên nó thành grp cho mục đích của câu trả lời của tôi.

Đang cố gắng lên lịch thay đổi mới từ '2012-06-01 08:00' tới '2012-06-03 08:00' ...

INSERT INTO tbl (prim, grp, startdate, enddate)
SELECT 1, 10, '2012-06-01 08:00', '2012-06-03 08:00'
WHERE  NOT EXISTS (
    SELECT *
    FROM   tbl
    WHERE  prim = 1
    AND    grp = 10
    AND   '2012-06-03 08:00' > startdate -- not >= to allow sharing a border
    AND   '2012-06-01 08:00' < enddate   -- and not BETWEEN ... AND either
    )

Lưu ý rằng tôi so sánh:

new_end   &gt old_start
new_start &lt old_end

Nếu bạn sử dụng BETWEEN .. AND .. bạn bao gồm các đường biên của một sự thay đổi trong thử nghiệm của bạn. Nó giống như cách sử dụng >=<= . Bạn cần sử dụng >< để cho phép các đường viền chồng lên nhau.

Vâng, và hãy thử cú pháp được đơn giản hóa của tôi. Bạn không chắc chắn về những gì bạn có ở đó ban đầu.
Đây là bản demo hoạt động trên sqlfiddle. com để chơi với.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hướng dẫn về Cơ sở dữ liệu Thư

  2. Sự cố khi tạo tệp .MDF từ Visual Studio 2010

  3. Chuyển đổi kiểu dữ liệu hình ảnh thành varchar trong sql server 2008

  4. Cách hiển thị đối chiếu của một cột trong SQL Server (T-SQL)

  5. Làm thế nào tôi có thể biết khi nào Tổng số chỉ mục văn bản đầy đủ của SQL kết thúc?