【问题标题】:fetch records which have current time falls in a range获取当前时间在一个范围内的记录
【发布时间】:2013-07-03 03:16:22
【问题描述】:

这是一道面试题: 给定一个数据库(mysql或等价物),每条记录都有“开始时间”和“结束时间”列 我被要求获取当前系统时间介于开始时间和结束时间之间的记录。但开始和结束时间是时间戳(YYYY-MM-DD HH:MM:SS)。所以我只应该寻找时间部分(HH:MM:SS)在范围内的那些(显然相同的日期永远不会重复:))。

【问题讨论】:

  • 我猜这个面试题是在考验你的谷歌能力?这样的问题只会导致查询为正在使用的数据库服务器找到适当的日期/时间函数,而实际上并没有受访者的任何能力。如果可以的话,我会否决实际的面试问题。

标签: sql database


【解决方案1】:

像这样?

SELECT *
FROM table
WHERE CURRENT_TIMESTAMP BETWEEN start_time and end_time

【讨论】:

  • 不是问的。他只关心时间戳的时间部分。日期部分不相关,应该被剥离/规范化。
  • 我只想要时间部分,但是开始时间就像mysql中的日期时间格式
【解决方案2】:

这个问题高度依赖于数据库引擎。几乎每个数据库都有自己的功能。在面试问题中说mysql or equivalent 与询问您是否知道那些特定的mysql 函数大致相同......顺便说一句,在主要数据库中,这些函数与标准实际定义的函数最不相似,部分原因是mysql 的历史使用 Unix 时间。 MySQL 就像数据库的 VB6,这个问题强烈表明面试官要么自己不知道这一点,要么厌倦了采访不知道这一点的开发人员。

完整的标准 sql 参考需要付费下载,但我确实在这里找到了 sql-92 标准日期和时间数据类型和操作的参考:

http://www.ibphoenix.com/resources/documents/design/doc_169

【讨论】:

    【解决方案3】:
    SELECT *
      FROM MyTable T
     WHERE TIME_TO_SEC(CURRENT_TIMESTAMP) BETWEEN TIME_TO_SEC(T.start_time)
           AND TIME_TO_SEC(T.end_time)
    

    【讨论】:

    • 你去@Curt。 Goofiness-1.
    • time_to_sec 是否采用日期时间格式并转换为时间或秒?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多