使用BETWEEN和Integers需要数学逻辑方面的帮助

时间:2016-01-08 22:41:54

标签: sql-server tsql

我有里程表格:

  • 里程表开始
  • 里程表结束

一个简单的表格:

LogID, Start, End

我想阻止用户输入与现有开始/结束对冲突的开始/结束对。只是有一些数学上的脑阻塞,可能是一个真正简单的解决方案。

例如:

IF EXISTS(SELECT 1 FROM Log WHERE (@Start + 1) BETWEEN [Start] AND [End]
BEGIN
  -- throw error
END

-- I'll combine these two after I figure out my issue

IF EXISTS(SELECT 1 FROM Log WHERE (@OdometerEnd -1) BETWEEN [Start] AND [End]
BEGIN
  -- throw error
END

这适用于以下值,只要我向前移动并且带有日志的人以正确的顺序输入它们,例如以下值:

Start: 50
End: 100

Start: 100
End: 150

Start: 150
End: 200

但是,如果有跳跃,例如:

Start: 50
End: 100

Start: 101 <-- here
End: 150

-- I want to allow the following record to be created

Start: 100
End: 101

我想我已经看过很多次了。如果我缺少一些简单的数学,我会很高兴对此感到愚蠢。

修改

这是我不想发生的事情的视觉表现:

[----------]
           [-----------]
       [--------] <-- clash

上面我的示例会停止此操作,除非它按顺序输入,我需要允许:

[----------]
           [-----------]
                            [-----------]
                       [----] <-- need to allow

2 个答案:

答案 0 :(得分:1)

如何将WHERE子句更改为:

WHERE @end > [Start]
AND @start < [End]

答案 1 :(得分:0)

到目前为止,这是有效的:

IF EXISTS(SELECT 1 FROM Log WHERE ((@Start + 1) <= [End] AND (@End - 1) >= Start))
    BEGIN
        -- Error out...
    END

有人能发现问题吗?仍在锤击。为什么这是如此精神混乱,我不知道。