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

时间:2016-03-16 15:58:03

标签: sql sql-server sql-server-2012

我正在尝试使用WHERE子句中包含时间戳的select查询来获取日期。

我的数据表看起来像这样:

| 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'

如果时间介于07:00到23:00之间,那么我的答案是正确的,否则我没有。

例如:

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

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

2 个答案:

答案 0 :(得分:0)

这会有效,但它在性能方面并不是最好的:

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)
)

如果可能的话,将跨越午夜的行拆分为2个单独的行可能会更好。

答案 1 :(得分:-3)

    ..'sometable.somedatefield >= DATE(' + moment(new Date()).format('YYYY-MM-DD') + ')'

您需要确保传入的日期采用SQL Server可识别的格式。我认为问题是你没有将SQL Date与SQL Date进行比较。以下是我在使用MySQL时如何做到这一点的一个示例,您应该能够非常快速地进行翻译。

function formatDate(date) { return moment(new Date(date)).tz('America/Denver').format('YYYY-MM-DD'); }

....

if (startDate) {
    qry +=
    'AND origin.load_date_time >= DATE("'+formatDate(startDate)+'") ';
}

if (endDate) {
    qry +=
    'AND origin.load_date_time <= DATE("'+formatDate(endDate)+'") ';
}

我希望这是有道理的。