Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL, wybór pomiędzy datą/godziną

Po pierwsze, nie używaj Group jako nazwę kolumny. Jest to słowo zastrzeżone w każdym standardzie SQL. Zmieniłem jego nazwę na grp na potrzeby mojej odpowiedzi.

Próbuję zaplanować nową zmianę z '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
    )

Zauważ, że porównuję:

new_end   &gt old_start
new_start &lt old_end

Jeśli używasz BETWEEN .. AND .. uwzględniasz granice zmiany w swoim teście. To to samo, co użycie >= i <= . Musisz użyć > i < aby umożliwić nakładanie się granic.

No i wypróbuj moją w dużej mierze uproszczoną składnię. Nie masz pewności, co tam miałeś.
Oto działająca demonstracja sqlfiddle. pl do zabawy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co oznacza Poważny błąd w bieżącym poleceniu. Ewentualne wyniki należy odrzucić. Błąd SQL Azure oznacza?

  2. SQL Jak ustalić, czy data miesiąc data zawiera 29,30 lub 31

  3. Generowanie skryptów dla określonych rekordów w SQL Server

  4. Jak znaleźć przyczynę zakleszczenia w sql server ro14?

  5. Pobierz ConnectionString z app.config w c#