【问题标题】:Sql server 2008 : Query to search for today's date within overlapping datesSql server 2008:查询以在重叠日期内搜索今天的日期
【发布时间】:2014-02-05 23:38:05
【问题描述】:

我有上表,其中我需要获取与今天日期匹配的 NoteIndx。只是为了测试,假设今天是 2013 年 6 月 2 日(2013 年 6 月 2 日),这会得到两条 noteindx 93105 和 104044 的记录。

但这里的正确值是 104044,因为我需要选择日期跨度最短的 STRTDATE 和 ENDDATE。

我正在尝试各种 sql 查询,但到目前为止没有得到正确的结果。

谁能帮助我进行最佳查询以获得上述结果?

谢谢。

【问题讨论】:

    标签: sql sql-server-2008-r2 timespan date-range overlapping-matches


    【解决方案1】:

    这是你想要的吗?

    select top 1 n.*
    from notes n
    where cast('2013-06-02' as date) >= strtdate and
          cast('2013-06-02' as date) < enddate + 1
    order by enddate - strtdate;
    

    这不使用between,因为您的日期存储为datetime——这总是会引入它们成为日期时间部分的可能性。

    如果您想要今天的日期,请使用getdate() 而不是cast('2013-06-02' as date)

    【讨论】:

    • +1 想补充一点BETWEEN也可以用于日期比较。
    • @user2989408 。 . .之间适用于日期常量(假设日期上没有时间分量)。它不适用于getdate()enddate 是今天的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2016-12-16
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多