Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL, избор между дата/час

Първо, не използвайте Group като име на колона. Това е запазена дума във всеки SQL стандарт. Преименувах го на grp за целите на моя отговор.

Опитвам се да планирам нова смяна от '2012-06-01 08:00' до '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
    )

Имайте предвид, че сравнявам:

new_end   &gt old_start
new_start &lt old_end

Ако използвате BETWEEN .. AND .. включвате границите на смяна във вашия тест. Това е същото като използването на >= и <= . Трябва да използвате > и < за да позволите границите да се припокриват.

Е, и опитайте моя до голяма степен опростен синтаксис. Не съм сигурен какво сте имали там първоначално.
Ето работеща демонстрация на sqlfiddle. com за игра.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ADO .NET срещу SQL Server Management Studio - ADO се представя по-зле

  2. Представяме ви нова функция – анализ на безизходица

  3. Проверете състоянието на всички съобщения от базата данни в SQL Server (T-SQL)

  4. Условно изявление в sql заявка на класическа ASP страница

  5. Как да конфигурирате SQL Server за управление на ASP.NET сесии