2011-02-10 138 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