【发布时间】:2020-10-19 09:49:16
【问题描述】:
我有一个结构如下的表:
DateId TimeId ProfilerId SensorId SensorValue
------------------------------------------------------------
651 01:16:58.000 0 9 0.00
651 01:16:58.000 0 10 0.00
651 01:16:58.000 0 11 0.00
651 01:16:58.000 0 12 0.00
651 01:16:58.000 0 13 0.00
651 01:16:58.000 0 14 0.00
651 01:16:58.000 0 15 0.00
651 01:16:58.000 0 16 0.00
651 01:16:58.000 0 17 0.00
651 01:16:58.000 0 18 0.00
651 01:16:59.000 0 0 -16965.60
651 01:16:59.000 0 1 164.80
651 01:16:59.000 0 2 -343.20
我正在开发一个带有下拉菜单的前端应用程序。为此,我需要选择以下内容:
- 第一分钟
- 前一小时
- 7 天
- 1 个月
- 全部
目前如果我执行以下操作:
SELECT *
FROM Fact.Readings
WHERE [TimeId] >= DATEADD(day, -1, GETDATE())
我遇到了一个错误
数据类型time和datetime在大于等于运算符中不兼容
如何查询这种时间格式(根据SQL表属性是time(3))
提前谢谢你
【问题讨论】:
-
询问数据库问题时,请始终定义数据类型。鉴于您的错误,我猜
TimeId的类型为Time。问题是您现在可能需要 1 或 100 天,但您仍然有相同的时间。我猜你需要加入dateid并得到一个约会,对吗?首先扩展您的查询来做到这一点 -
时间没有任何日期的概念。因此,尝试将时间值与您操纵的 getdate 值进行比较是没有意义的,这就是生成错误的原因。也许您打算将当前时间(无论日期如何)与存储在数据库中的值进行比较。这可能会解决错误,但您似乎有更重要的设计问题需要解决。
-
This fiddle 可以解决该错误,但您仍然需要解决 GUI 的多日期选项的含义。不知道“第一分钟”作为过滤选项意味着什么 - 您的预期用户知道吗?
标签: sql sql-server date