【发布时间】:2020-09-15 19:08:33
【问题描述】:
已解决
CONCAT((DATEDIFF(Minute,START_DTTM,END_DTTM)/60),'h:',
(DATEDIFF(Minute,START_DTTM,END_DTTM)%60) 'm') AS TotalTimeMissing
产生 TotalTimeMissing:5h:13m
________
我正在尝试返回两个特定日期之间的时间戳值,以计算出包裹丢失和被发现之间的时间。
编辑:代码已更新为包含来自 Sami 的代码。我还添加了从原始代码中排除的附加代码。
这是当前代码:
USE PACKAGE
GO
SELECT
dp.LEGACY_ID
,dp.SURNAME
,dp.FORENAME
,dp.ETHNICITY_DESCRIPTION
,dp.BIRTH_DTTM
,DATEDIFF(YY, dp.BIRTH_DTTM, GETDATE()) -
CASE
WHEN RIGHT(CONVERT(VARCHAR(6), GETDATE(), 12), 4) >=
RIGHT(CONVERT(VARCHAR(6), dp.BIRTH_DTTM, 12), 4)
THEN 0
ELSE 1
END AS [Current Age]
--^Precise age calc due to potential LL inaccuracy
,mp.DIM_PERSON_ID
,mp.MISSING_STATUS
,mp.START_DTTM
,mp.END_DTTM
,dp.LEGACY_ID
,mp.RETURN_INT_OFFERED
,mp.RETURN_INT_ACCEPTED
,mp.RETURN_INT_DATE
FROM C_S.FACT_MISSING_PACKAGE AS mp
JOIN C_S.FACT_MISSING_PACKAGE AS dp ON mp.DIM_PERSON_ID = dp.DIM_PERSON_ID
WHERE CAST (mp.START_DTTM AS DATE)
BETWEEN DATEADD(YY, -1, CAST (GETDATE() AS DATE)) AND CAST (GETDATE() AS DATE)
--^Displays all records within exactly 1 year of run date
UNION (SELECT CONCAT(Value / 3600 / 24,
' Days ',
RIGHT(CONCAT('00', Value / 3600 % 24), 2),
':',
RIGHT(CONCAT('00', Value / 60 % 60), 2),
':',
RIGHT(CONCAT('00',Value % 3600 % 60), 2)
) AS TotalTimeMissing
FROM
(
SELECT mp.DIM_PERSON_ID, DATEDIFF(Second, mp.START_DTTM, mp.END_DTTM) Value
FROM C_S.FACT_MISSING_PACKAGE AS mp
) T(Value))
ORDER BY START_DTTM ASC;
Sami 帮我解决了大部分问题,但是当我运行上面的代码时,我得到一个与 UNION 和 T 相关的错误,T 没有说明所需的列数。为了解决这个问题,我尝试将第一轮 SELECT 列放入 (SELECT CONCAT() 语句中,但它会产生错误,所以当谈到如何修复它时我有点茫然?
我需要返回所有这些列,并在末尾添加一列作为 TotalTimeMissing
谢谢
【问题讨论】:
-
请提供样本数据和期望的结果。
-
更新原帖!
标签: sql sql-server tsql datediff