【问题标题】:Set variable in SELECT statement在 SELECT 语句中设置变量
【发布时间】:2011-02-11 04:29:59
【问题描述】:

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

【问题讨论】:

    标签: sql-server-2008 variables select


    【解决方案1】:

    很难准确地说出你想要做什么,但我认为这可能就是你想要的:

    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
    

    【讨论】:

    • 比我希望的要复杂一点,但可以工作。谢谢你。另外,我认为这些查询的 X 和结尾应该是 D。
    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 2020-06-19
    • 2011-03-24
    • 2020-11-28
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多