Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Batasan pemeriksaan tumpang tindih rentang tanggal

PERIKSA sedang dijalankan setelah baris telah disisipkan, sehingga rentang tumpang tindih dengan dirinya sendiri.

Anda harus mengubah WHERE Anda untuk memasukkan sesuatu seperti:@MyTableId <> MyTableId .

BTW, ekspresi WHERE Anda dapat disederhanakan.

Rentang jangan tumpang tindih jika:

  • akhir rentang yang satu sebelum awal rentang lainnya
  • atau awal dari satu rentang adalah setelah akhir yang lain.

Yang dapat ditulis dalam SQL seperti:

WHERE @DateEnd < DateStart OR DateEnd < @DateStart

Abaikan itu untuk mendapatkan rentang yang melakukan tumpang tindih...

WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)

...yang menurut hukum De Morgan sama dengan...

WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)

...yang sama dengan:

WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart

Jadi WHERE terakhir Anda seharusnya:

WHERE
    @MyTableId <> MyTableId
    AND @DateEnd >= DateStart
    AND DateEnd >= @DateStart

[SQL Fiddle]

CATATAN:untuk mengizinkan rentang "menyentuh", gunakan <= dalam ekspresi awal, yang akan menghasilkan > dalam ekspresi terakhir.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengganti nama Tabel di SQL Server (T-SQL)

  2. Hindari duplikat dalam kueri INSERT INTO SELECT di SQL Server

  3. Bisakah saya mendapatkan nama semua tabel database SQL Server di aplikasi C#?

  4. Cara menggunakan klausa Where dalam Select Statement di SQL Server - Tutorial SQL Server / TSQL Bagian 109

  5. Kunci utama kenaikan otomatis di SQL Server Management Studio 2012