2011-02-10 179 views
2

我遇到了与here中描述的相同的问题,但不幸的是该解决方案不适用于MS SQL Server。 MS SQL Server是否有类似的语法?在SELECT语句中设置变量

注意:我的查询并不像示例中那么简单。我想在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 

回答

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 
+0

小比我希望的更复杂,但工作。谢谢。另外,我认为X和这些查询的结尾应该是D. – Stijn 2011-02-10 09:23:40