【问题标题】:T-SQL change Time Portion of a DateTime, using another DateTime Time portionT-SQL 更改 DateTime 的时间部分,使用另一个 DateTime 时间部分
【发布时间】:2016-10-08 15:54:03
【问题描述】:

我有一个返回以下内容的 select 语句:

SELECT
   StartDate
   ,EndDate
FROM
   MyTable

结果返回如下数据:

我想要的是使用 EndDate 的值更改 StartDate 的 时间部分。这样只有两个日期的时间部分是相同的,取自 EndDate。我必须保持相同,精确到毫秒。

是否可以使用 DATEADD 功能?

【问题讨论】:

    标签: tsql datetime dateadd


    【解决方案1】:

    使用DateAddDateDiff

    SELECT DATEADD(DAY, DATEDIFF(DAY, EndDate, startDate), EndDate) As StartDate,
           EndDate
    FROM MyTable
    

    我正在添加开始日期和结束日期之间的天数差。 由于 DateDiff 在较早日期之前具有较晚日期,因此它将天数差返回为负数。

    我猜有些人会觉得更具可读性的另一个选项是:

    SELECT DATEADD(DAY, -DATEDIFF(DAY, startDate, EndDate), EndDate) As StartDate,
           EndDate
    FROM MyTable
    

    【讨论】:

    • 哇,它的工作时间长达几毫秒,我没想过将 DATEADD 与 DATEDIFF 结合起来。谢谢
    • 是的,你改变的只是天数,时间部分不受此影响。
    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多