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

SQL, Memilih antara tanggal/waktu

Pertama, jangan gunakan Group sebagai nama kolom. Ini adalah kata yang dicadangkan di setiap standar SQL. Saya menamainya menjadi grp untuk tujuan jawaban saya.

Mencoba menjadwalkan shift baru dari '2012-06-01 08:00' ke '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
    )

Perhatikan bahwa saya membandingkan:

new_end   &gt old_start
new_start &lt old_end

Jika Anda menggunakan BETWEEN .. AND .. Anda memasukkan batas-batas pergeseran dalam pengujian Anda. Ini sama dengan menggunakan >= dan <= . Anda perlu menggunakan > dan <= untuk memungkinkan batas tumpang tindih.

Nah, dan coba sintaks saya yang sebagian besar disederhanakan. Tidak yakin tentang apa yang Anda miliki di sana pada awalnya.
Berikut adalah demo yang berfungsi di sqlfiddle. com untuk bermain bersama.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa menyusun kueri untuk memberi saya hanya baris yang cocok dengan SEMUA nilai dalam daftar ID CSV di T-SQL

  2. Masalah izin di SSMS:Izin SELECT ditolak pada objek 'extended_properties', database 'mssqlsystem_resource', ... Kesalahan 229)

  3. Mengambil baris terakhir kedua dengan hanya satu pilihan di SQL Server?

  4. Menggunakan kolom Alias ​​​​di klausa where di ms-sql 2000

  5. Menyimpan data XML di SQL Server