【问题标题】:How to query time data from database with format HH:MM:SS from SQL Server如何从 SQL Server 以 HH:MM:SS 格式从数据库中查询时间数据
【发布时间】: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


【解决方案1】:

GETDATE() 返回 datetime 但您的 TimeId 列实际上是 time(3)。您可以使用以下CAST(GETDATE() AS TIME),但您只是在比较时间而不是日期。

DateId的对应日期如何获取?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多