Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在select查询中使用时间戳where子句时如何获取数据_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql 在select查询中使用时间戳where子句时如何获取数据

Sql 在select查询中使用时间戳where子句时如何获取数据,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我正在尝试使用select查询获取日期,该查询在WHERE子句中具有时间戳 我的数据表如下所示: | startTime | endTime | TimeID ---------------------------------- | 07:00:00 | 15:00:00 | 1 | 15:00:00 | 23:00:00 | 2 | 23:00:00 | 07:00:00 | 3 -----------------------------

我正在尝试使用select查询获取日期,该查询在WHERE子句中具有时间戳

我的数据表如下所示:

| startTime  |  endTime    | TimeID 
----------------------------------
| 07:00:00   |  15:00:00   |   1 
| 15:00:00   |  23:00:00   |   2
| 23:00:00   |  07:00:00   |   3
---------------------------------
这是我的查询语句:

SELECT  TimeID
FROM    myTable
WHERE   StartTime >= 'Current_TIME' AND EndTime < 'Current_TIME'
选择TimeID
从myTable
其中StartTime>=“当前时间”和EndTime<“当前时间”
如果时间在07:00到23:00之间,那么我得到的答案是正确的,否则我得不到

例如:

如果当前时间为02:00:00,则第一个条件为假,因为02不大于23,第二个条件为有效>02小于07


我尝试在WHEN和ISNULL时使用BETWEEN子句和use CASE,但在上面的场景中查询总是返回空的。

这会起作用,但在性能方面不是最好的:

SELECT  TimeID
FROM    myTable
WHERE   
(
  (StartTime <= 'Current_TIME' AND EndTime > 'Current_TIME') or
  (StartTime <= 'Current_TIME' AND StartTime > EndTime) or
  (EndTime   >  'Current_TIME' AND StartTime > EndTime)
)
选择TimeID
从myTable
哪里
(
(开始时间“当前时间”)或
(开始时间-结束时间)或
(结束时间>当前时间>开始时间>结束时间)
)

如果可能,最好将跨越午夜的行拆分为两个单独的行。

是否可以将跨越午夜的行拆分为两个单独的行?最好的解决方案是使用时间数据类型,而不是尝试比较字符串值。谢谢,此解决方案非常好,我不能把午夜分成两行