Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL, Auswahl zwischen Datum/Uhrzeit

Verwenden Sie zunächst nicht Group als Spaltenname. Es ist ein reserviertes Wort in jedem SQL-Standard. Ich habe es in grp umbenannt zum Zweck meiner Antwort.

Versuch, eine neue Schicht ab '2012-06-01 08:00' zu planen bis '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
    )

Beachten Sie, dass ich vergleiche:

new_end   &gt old_start
new_start &lt old_end

Wenn Sie BETWEEN .. AND .. verwenden Sie beziehen die Grenzen einer Verschiebung in Ihren Test ein. Es ist dasselbe wie die Verwendung von >= und <= . Sie müssen > verwenden und < Grenzen überlappen zu lassen.

Nun, und versuchen Sie es mit meiner stark vereinfachten Syntax. Ich bin mir nicht sicher, was Sie ursprünglich dort hatten.
Hier ist eine funktionierende Demo zu sqlfiddle. de zum Spielen.