Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Одновременно поменять местами значения переменных  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
Здравствуйте!
Есть код, который меняет местами две переменные:

declare @Start datetime, @Finish datetime, @tmp datetime, @znak int

select @Start = '2011-02-13', @Finish = '2011-02-02', @znak = 1

-- Проверка
select convert(varchar,@Start,104) [Дата началя], convert(varchar,@Finish,104) [Дата окончания], @znak [@znak]

if @Finish < @Start
 select @tmp = @Finish, @Finish = @Start, @Start = @tmp, @znak = -1
 
-- Проверка
select convert(varchar,@Start,104) [Дата началя], convert(varchar,@Finish,104) [Дата окончания], @znak [@znak]

Можно ли этот блок как-нибудь переписать без IF ?
if @Finish < @Start
 select @tmp = @Finish, @Finish = @Start, @Start = @tmp, @znak = -1

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) 
Apr 2 2010 15:53:02
Copyright (c) Microsoft Corporation
Enterprise Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
13 сен 11, 16:43    [11270783]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно поменять местами значения переменных  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
Начинающий SQL 2008,
select case?
13 сен 11, 16:46    [11270800]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно поменять местами значения переменных  [new]
iljy
Member

Откуда:
Сообщений: 8711
Начинающий SQL 2008,

set dateformat ymd
declare @Start datetime, @Finish datetime, @tmp datetime, @znak int

select @Start = '2011-02-13', @Finish = '2011-02-02', @znak = 1

select @Start = MIN(x), @Finish = MAX(x) from (values(@Start),(@Finish)) t(x)
select @Start, @Finish
А зачем вам?
13 сен 11, 16:50    [11270834]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно поменять местами значения переменных  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
s.w.a.n.
Начинающий SQL 2008,
select case?
Да я сначала так и пробовал :(
select case when @Finish < @Start then
 (select @tmp = @Finish, @Finish = @Start, @Start = @tmp, @znak = -1)
end

Ошибка:
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near '='.
13 сен 11, 16:52    [11270856]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно поменять местами значения переменных  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
iljy,
круто!

iljy
А зачем вам?

Хочу из скалярной функции сделать InLine.

Я привел упрощенный пример, но логика примерно такая же.
В целом, Ваш вариант подходит, спасибо!
13 сен 11, 16:57    [11270899]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно поменять местами значения переменных  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Начинающий SQL 2008,

 SELECT @tmp = @Finish, @Finish = @Start, @Start = @tmp, @znak = -1
 WHERE @Finish < @Start
13 сен 11, 17:16    [11271077]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно поменять местами значения переменных  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
trew,

Тоже ОК.
13 сен 11, 17:58    [11271428]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить