SQL:选择两列之间的时间范围

时间:2015-03-02 04:27:45

标签: mysql sql-server

我正在研究一个名为患者记录管理系统的系统的一部分,其中有一个约会管理,并且在约会中你让其他人一旦被占用就无法使用时间段,所以这就是问题所在: 我的数据库中有3列:日期(日期),TimeIn(时间),TimeOut(时间) 这就是我到目前为止所做的:

    sqlQuery = "SELECT * FROM appointment where date = '" & datePicker.Value.ToString("dd-MM-yyyy") & "' and TimeIn <= CAST('" & timeinPicker.value.ToString("HH:mm") & "' AS Time) and TimeOut >= CAST('" & timeoutPicker.value.ToString("HH:mm") & "' AS Time)"

例如,如果我将12:00放入timeinPicker,将13:00放入timeoutPicker,则应选择12:00至13:00之间的所有时间,但我的问题是它不会被选中,它只能选择它我输入正好是12:00和13:00但是当我把12:01和12:59放在一起时,sql无法选择它就像它不存在 有没有办法选择它们,以便我知道哪个时间被占用。

P.S。我正在使用MySql

2 个答案:

答案 0 :(得分:0)

如果你使用的是java意味着替换&amp;带+的字符并尝试

sqlQuery = "SELECT * FROM appointment where date = '" + datePicker.Value.ToString("dd-MM-yyyy") + "' and TimeIn <= CAST('" + timeinPicker.value.ToString("HH:mm") + "' AS Timein) and TimeOut >= CAST('" + timeoutPicker.value.ToString("HH:mm") + "' AS Timeout)";

答案 1 :(得分:0)

首先,您应该始终使用参数化查询,以保护您免受Sql Injection的影响 您可以像这样更改您的查询,

string query = "SELECT * FROM appointment where date = @DateValue and TimeIn <= CAST(@TimeInValue AS Time) and TimeOut >= CAST(@TimeOutValue AS Time)"

然后使用AddParamter()将参数值设置为以下值我不知道您正在使用哪种编程语言,因此将有类似的方法添加参数使用,

 @DateValue = datePicker.Value.ToString("dd-MM-yyyy")
 @TimeOutValue = timeoutPicker.value.ToString("HH:mm") 
 @TimeInValue = timeInPicker.value.ToString("HH:mm")