在SELECT语句中设置变量

时间:2011-02-10 08:43:11

标签: sql-server-2008 variables select

我遇到与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

1 个答案:

答案 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