我正在尝试使用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,但查询在上面的场景中总是返回空。
答案 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)+'") ';
}
我希望这是有道理的。