Установить переменную в операторе SELECT - PullRequest
2 голосов
/ 10 февраля 2011

У меня та же проблема, что и описанная здесь , к сожалению, решение не работает для MS SQL Server.Существует ли подобный синтаксис для MS SQL Server?

Примечание. Мой запрос не такой простой, как в примере.Я хотел бы повторно использовать DifferenceMinutes в случае TooLateTime.

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 Ответ

4 голосов
/ 10 февраля 2011

Трудно точно сказать, что вы пытаетесь сделать, но я думаю, что это может быть то, что вы ищете:

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

Вам придется заменить ваши исходные таблицы на "TableName" в разделе FROM внутреннего запроса.

Свернув вычисленные значения во вложенный выбор, подобный этому, вы можете обращаться к ним по любому имени, которое вы дадите им во внешнем запросе.

Если вы хотите установить переменные для каждого из значений, вы можете сделать это следующим образом, но вам нужно убедиться, что вы возвращаете только одну строку из запроса:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...