sql >> Database >  >> RDS >> Sqlserver

SQL, Kiezen tussen datum/tijden

Gebruik ten eerste geen Group als kolomnaam. Het is een gereserveerd woord in elke SQL-standaard. Ik heb het hernoemd naar grp voor het doel van mijn antwoord.

Ik probeer een nieuwe dienst te plannen vanaf '2012-06-01 08:00' naar '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
    )

Merk op dat ik vergelijk:

new_end   &gt old_start
new_start &lt old_end

Als u BETWEEN .. AND .. . gebruikt je neemt de grenzen van een shift mee in je toets. Het is hetzelfde als het gebruik van >= en <= . U moet > . gebruiken en < om randen te laten overlappen.

Nou, en probeer mijn grotendeels vereenvoudigde syntaxis. Ik weet niet zeker wat je daar oorspronkelijk had.
Hier is een werkende demo op sqlfiddle. com om mee te spelen.




  1. .Net MySql-fout De opgegeven sleutel was niet aanwezig in het woordenboek

  2. Hibernate Formula Annotation - MySql-functies:INTERVAL, DAG

  3. Gegroepeerde geaggregeerde pushdown

  4. Bitmanipulatie en MySQL ophalen in PHP