【问题标题】:How can I use Hours, Minutes and Seconds in a MSSQL query?如何在 MSSQL 查询中使用小时、分钟和秒?
【发布时间】:2022-01-23 02:10:17
【问题描述】:

我尝试了很多方法,但都找不到。我正在构建一个查询,想要获取小时、分钟和秒之间的数据。

已经尝试过类似的方法:

SELECT * FROM MYTABLENAME TB
WHERE (TB.DATE BETWEEN '25/11/2013 00:00:00' AND '25/11/2013 23:59:59')

【问题讨论】:

  • Well TABLE 是一个保留字,因此您只能通过使用 [TABLE] 来使用名为 Table 的 Table。请不要将保留名称用于表名或列名。哦,您能否添加一些表结构、示例数据并告诉我们实际的问题是什么!
  • get the data between hours, minutes and seconds. 是什么意思?正如史蒂夫建议的那样,添加一些示例数据和所需的结果(最好使用db<>fiddle)。另外BETWEEN 对于日期范围查询非常危险,请始终使用 >= 范围开始和 after 范围结束。类似地,区域性、模棱两可的格式(如 d/m/y)是危险的 - 始终使用安全、明确的格式,如 yyyymmddDating Responsibly 解释了这些以及更多内容。
  • 哦,我只是用关键字表来举例。当我尝试仅使用 'dd/mm/yyyy' 构建查询时,我无法获取记录,因为该字段中还有小时、分钟和秒。
  • 好的,让我们看看实际的表架构、示例数据和预期结果。列数据类型是datetime 还是varchar

标签: sql sql-server date


【解决方案1】:

你可以使用这样的东西

select * from TB
WHERE cast(date_time_attribute as time ) between '10:00:00' and '23:00:00'

要对日期也施加约束,您可以简单地添加 ->

select * from TB
WHERE ( cast(date_time_attribute as time ) between '10:00:00' and '23:00:00' )
AND date(date_time_attribute) = 'dd:mm:yyyy'

date_time_attribute 是包含日期时间的属性

【讨论】:

  • date() 不是一个函数,而dd:mm:yyyy 是一个非常糟糕的建议格式。
  • @AaronBertrand 我的错,对于 sql-server,我们有 DATEPART() 这可以用来代替 date()
  • 实际上 'dd/mm/yyyy' 是我所在国家/地区的数据格式,因此在我公司,我们将其用作所有日期字段的模式。
  • @artu0s date 列没有格式,它们以二进制形式存储。如果您将它们存储为varchar,那么无论如何您都会遇到问题
  • @artu0s 如果您雇用美国人,或使用美国地区/日期格式/语言设置的人,或登录到默认设置的 RDP 服务器或跳转框,则必须更改,并且当您在工作之外与美国人互动时(例如在本网站上),可能会导致混淆。同时,如果您使用标准的、明确的格式,它永远不会中断。请阅读“区域格式”部分提供的所有链接here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多