007*_*007 4 sql sql-server sql-server-2008
DECLARE @TABLE TABLE (ID INT IDENTITY(1,1), FinalDateTime Datetime2(7),
ElapsedTime Time(7))
INSERT INTO @TABLE (FinalDateTime, ElapsedTime)
SELECT '2014-01-21 00:00:00.1110010','12:00:00.1100009'
-- Expected Output = '2014-01-20 12:00:00.0010001'
UNION ALL
SELECT '2014-01-20 14:00:00.1110010','02:00:00.1100009'
-- Expected Output = '2014-01-20 12:00:00.0010001'
UNION ALL
SELECT '2014-01-20 12:02:00.1110010','00:02:00.1100009'
-- Expected Output = '2014-01-20 12:00:00.0010001'
UNION ALL
SELECT '2014-01-20 12:00:02.1110010','00:00:02.1100009'
-- Expected Output = '2014-01-20 12:00:00.0010001'
UNION ALL
SELECT '2014-01-20 12:00:00.1110010','00:00:00.1100009'
-- Expected Output = '2014-01-20 12:00:00.0010001'
SELECT * FROM @TABLE
Run Code Online (Sandbox Code Playgroud)
我想减去time(7)从Datetime2(7).我无法弄清楚如何分别减去整个时间而不是HH/MM/SS/MS.
由于粒度,您需要单独执行纳秒计算.因此,减去整秒的经过时间,然后减去纳秒部分.
DECLARE @TABLE TABLE (FinalDateTime Datetime2(7), ElapsedTime Time(7));
INSERT INTO @TABLE (FinalDateTime, ElapsedTime) VALUES
('2014-01-21 00:00:00.1110010','12:00:00.1100009'),
('2014-01-20 14:00:00.1110010','02:00:00.1100009'),
('2014-01-20 12:02:00.1110010','00:02:00.1100009'),
('2014-01-20 12:00:02.1110010','00:00:02.1100009'),
('2014-01-20 12:00:00.1110010','00:00:00.1100009');
;WITH x AS
(
SELECT
FinalDateTime,
ElapsedTime,
ElapsedSeconds = DATEDIFF(SECOND, '0:00', ElapsedTime),
AdditionalNanoseconds = DATEPART(NANOSECOND, ElapsedTime)
FROM @TABLE
)
SELECT
FinalDateTime,
ElapsedTime,
StartTime = DATEADD(NANOSECOND, -AdditionalNanoseconds,
DATEADD(SECOND, -ElapsedSeconds, FinalDateTime)
)
FROM x;
Run Code Online (Sandbox Code Playgroud)
你可以更简洁地做到这一点,当然,我只是觉得CTE有助于表达步骤.
SELECT
FinalDateTime,
ElapsedTime,
StartTime = DATEADD(NANOSECOND, -(DATEPART(NANOSECOND, ElapsedTime)),
DATEADD(SECOND, -(DATEDIFF(SECOND, '0:00', ElapsedTime)), FinalDateTime)
)
FROM @TABLE;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
982 次 |
| 最近记录: |