【问题标题】:SQL help on Date and Time Range日期和时间范围的 SQL 帮助
【发布时间】:2012-05-07 05:36:36
【问题描述】:

我在扩展下面的查询时遇到了一些困难。 下面的查询有效,并为我提供了我需要的所有行。

select (e.Firstname+' '+ e.lastname) as ApprovedBy
    , wd.TargetDate
    ,wd.ACTDate
    ,wd.UploadDate
    ,wd.ApproveDate 
From Approved wd 
JOIN Employee e 
    on EmployeeID = wd.ApproveDateId 
where wd.ApproveDate Between '4/2/2012 14:30:00.000' and '4/30/2012 23:00:59.000'
order by ApproveDate 

现在我必须把它放在一个日期范围内吗? 我需要的是有关如何获取所有大于 '4/2/2012 14:30:00.000' 但介于 2012 年 4 月 2 日和 2012 年 4 月 30 日之间的行的方向?我只想要日期范围内时间大于 14:30:00.000 的行?

谢谢

【问题讨论】:

    标签: tsql date time


    【解决方案1】:

    假设您的意思是您想要一个 DATE 范围(即没有时间)然后是包括时间在内的第二个条件,可以按如下方式完成(SQL 2008+):

    SELECT  ( e.Firstname + ' ' + e.lastname ) AS ApprovedBy ,
            wd.TargetDate ,
            wd.ACTDate ,
            wd.UploadDate ,
            wd.ApproveDate
    FROM    Approved wd
            JOIN Employee e ON EmployeeID = wd.ApproveDateId
    WHERE   CONVERT(DATE, wd.ApproveDate) BETWEEN CONVERT(DATE, '4/2/2012', 101)
                                          AND     CONVERT(DATE, '4/30/2012', 101)
            AND wd.ApproveDate > CONVERT(DATETIME, '4/2/2012 14:30:00.000', 101)
    ORDER BY ApproveDate  
    

    如果您想要时间更长的所有日子(在范围内),请将上面的第二个条件替换为:

    AND CONVERT(TIME(0), wd.ApproveDate) > CONVERT(TIME(0), '14:30:00')
    

    【讨论】:

    • 那行得通,我只是在这个过程中学到了一些我将来可以使用的东西,非常感谢
    【解决方案2】:

    格式应该是

    'YYYY-MM-DD HH:MM:SS'
    

    所以 2012 年 4 月 2 日是

    '2012-04-02 14:30'.
    

    您可以使用 BETWEEN 来比较这样的日期。

    【讨论】:

    • 日期的格式可以是任何序列(在合理范围内),只要它包含在适当的 convert() + Style Indicator 中:)
    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多