我尝试根据以下条件在查询中设置时间和日期:
我有两个第一个条件并且工作正常,但不能同时结合时间和日期的变化。我怎样才能做到这一点?
以下代码适用于前两个条件!
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))
感谢
答案 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;
双CONVERT
(CONVERT(datetime2(0),CONVERT(date...
)是因为数据类型date
与DATEADD(HOUR...
不兼容。我使用了datetime2
,因为现在应该使用datetime
。