【发布时间】:2025-12-31 04:35:06
【问题描述】:
我有以下问题
SELECT
CASE
WHEN CS.StartTime > CURRENT_TIMESTAMP THEN 'STARTING LATER'
WHEN x.timing < 30 THEN 'A LITTLE LATE'
WHEN x.timing >= 30 THEN 'VERY LATE'
ELSE 'Unknown Status'
END as RefreshStartStatus,
CASE WHEN CS.StartTime <= CURRENT_TIMESTAMP THEN CONCAT(x.timing ', min(s) late') END as info
FROM #CSTempTable CS
LEFT OUTER JOIN #SubscriptionAggTempTable SA ON SA.SubscriptionID = CS.SubscriptionID
CROSS APPLY (VALUES (DATEDIFF(MINUTE, CS.StartTime, SA.TodayFirstRunTime))) as x(timing)
示例结果:
RefreshStartStatus info
A LITTLE LATE 0 min(s) late
STARTING LATER NULL
A LITTLE LATE 9 min(s) late
A LITTLE LATE 0 min(s) late
STARTING LATER NULL
A LITTLE LATE 0 min(s) late
VERY LATE 46 min(s) late
Unknown Status min(s) late
A LITTLE LATE 0 min(s) late
这很好,但 0 有点误导。可能是毫秒级的差异导致刷新有点晚,那么我怎样才能让这个显示准确的时间呢?
例如
A LITTLE LATE 2 sec(s) late
A LITTLE LATE 1 min(s) late
或者如果这很复杂,那么
A LITTLE LATE 0.03 min(s) late
A LITTLE LATE 1 min(s) late
注意:2 秒等于 0.0333 分钟
【问题讨论】:
-
您是否考虑过使用
datetime2(0)而不是datetime?或者,如果您只希望它精确到一分钟,那么smalldatetime。
标签: sql sql-server string tsql lateral-join