我遇到与here所述相同的问题,遗憾的是该解决方案不适用于MS SQL Server。 MS SQL Server是否存在类似的语法?
注意:我的查询不像示例中那么简单。我想在TooLateTime案例中重用DifferenceMinutes。
DATEDIFF(MINUTE, DayOfWeekStopTime, GETDATE()) AS DifferenceMinutes,
CASE
WHEN DATEDIFF(MINUTE, DayOfWeekStopTime, GETDATE()) < 0 THEN NULL
ELSE CONVERT(varchar, GETDATE() - DayOfWeekStopTime, 108)
END AS TooLateTime
答案 0 :(得分:4)
要确切地说出你想要做什么有点难,但我想这可能就是你要找的东西:
SELECT
DifferenceMinutes,
CASE
WHEN DifferenceMinutes < 0 THEN NULL
ELSE CONVERT(varchar, GETDATE() - DayOfWeekStopTime, 108)
END AS TooLateTime
FROM (
SELECT
DayOfWeekStopTime,
DATEDIFF(MINUTE, DayOfWeekStopTime, GETDATE()) AS DifferenceMinutes
FROM TableName
) X
您必须在内部查询的FROM部分替换源表中的“TableName”。
通过将计算值滚动到这样的嵌套选择中,您可以通过外部查询中给出的任何名称来引用它们。
如果要为每个值设置变量,可以按如下方式设置,但是您需要确保只返回查询中的一行:
DECLARE @DifferenceMinutes int, @TooLateTime varchar(30)
SELECT
@DifferenceMinutes = DifferenceMinutes,
@TooLateTime = CASE
WHEN DifferenceMinutes < 0 THEN NULL
ELSE CONVERT(varchar, GETDATE() - DayOfWeekStopTime, 108)
END
FROM (
SELECT
DayOfWeekStopTime,
DATEDIFF(MINUTE, DayOfWeekStopTime, GETDATE()) AS DifferenceMinutes
FROM TableName
) X