如何在SQL中更改日期时间中的日期和时间

时间:2018-05-09 10:59:11

标签: sql sql-server sql-server-2008

我尝试根据以下条件在查询中设置时间和日期:

  1. 如果时间在MyDate< 9:00然后将时间设置为9:00
  2. 如果时间在9:00< MyDate< 15:00然后将时间设置为16:00
  3. 如果时间是MyDate> 15:00然后将时间设置为9:00和日期+ 1
  4. 我有两个第一个条件并且工作正常,但不能同时结合时间和日期的变化。我怎样才能做到这一点?

    以下代码适用于前两个条件!

    Case When cast(MyDate as TIME) < '09:00:00' Then DATEADD(Hour, 9, CAST(CAST(PayoutDtApplication As Date) As Datetime)) 
    
    Case When cast(MyDate as TIME) < '09:00:00' Then DATEADD(Hour, 9, CAST(CAST(PayoutDtApplication As Date) As Datetime))
    

    感谢

1 个答案:

答案 0 :(得分:1)

这是一个猜测,基于以下评论:

  

根据我得到的数据,这个数字可能会有所不同,只是想说我需要将时间设置为9:00,并且对于我得到的所有日期都要设置为+ 1。我有不同的约会。

猜测,无论何时,OP都希望在09:00:00将值更改为以下日期。

如果是这样,实现它的一种方法是:

SELECT DATEADD(HOUR, 33, CONVERT(date,YourDateColumn)) AS NewDate
FROM YourTable;

再次,这是猜测。如果OP详细说明,我会很乐意扩展我的答案,或者如果它无关紧要的话就将其删除。

编辑:基于OP编辑中的新逻辑:

CREATE TABLE #Sample (YourDate datetime2(0));

INSERT INTO #Sample
VALUES ('2018-05-09T08:57:00'),
       ('2018-05-09T14:26:37'),
       ('2018-05-09T19:24:01');
GO

SELECT YourDate,
       CASE WHEN CONVERT(time, YourDate) < '09:00:00' THEN DATEADD(HOUR,9,CONVERT(datetime2(0),CONVERT(date,YourDate)))
            WHEN CONVERT(time, YourDate) > '15:00:00' THEN DATEADD(HOUR,33,CONVERT(datetime2(0),CONVERT(date,YourDate)))
            ELSE DATEADD(HOUR,15,CONVERT(datetime2(0),CONVERT(date,YourDate))) END AS NewDate
FROM #Sample;

GO

DROP TABLE #Sample;

CONVERTCONVERT(datetime2(0),CONVERT(date...)是因为数据类型dateDATEADD(HOUR...不兼容。我使用了datetime2,因为现在应该使用datetime