sql >> Databáze >  >> RDS >> Sqlserver

SQL, výběr mezi datem a časem

Za prvé, nepoužívejte Group jako název sloupce. Je to vyhrazené slovo v každém standardu SQL. Přejmenoval jsem to na grp pro účely mé odpovědi.

Pokouším se naplánovat novou směnu od '2012-06-01 08:00' do '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
    )

Všimněte si, že srovnávám:

new_end   &gt old_start
new_start &lt old_end

Pokud použijete BETWEEN .. AND .. do svého testu zahrnete hranice posunu. Je to stejné jako při použití >= a <= . Musíte použít > a < aby se hranice překrývaly.

No a zkuste moji značně zjednodušenou syntaxi. Nejste si jisti, co jste tam původně měli.
Zde je pracovní ukázka na sqlfiddle. com hrát.




  1. Neočekávaná výjimka:SQLSTATE[HY000] [1045] Přístup odepřen uživateli ****@'localhost' (s použitím hesla:ANO)

  2. Existuje způsob, jak nainstalovat pouze klienta mysql (Linux)?

  3. Volání funkce Oracle ze serveru SQL Server Linked Server

  4. jak vložit nový řetězec, pokud má hodnotu kromě nuly