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

Откуда: glubinka
Сообщений: 4256
Что-то я затупил или глазх замылился
результат должен быть 4. 9 - это результат первой итерации

/*
ALTER FUNCTION fn_damm( @value int )
RETURNS int
AS
BEGIN
*/
    declare @value int = 572;
    declare @damm table( inter tinyint not null, input tinyint not null, value tinyint not null, primary key(inter, input));
    declare @result int = 0;
    declare @txt varchar(16);
    SET @txt = CAST(@value as varchar(16));
    declare @length int = LEN(@txt), @idx int = 1;

    insert into @damm (inter, input, value) values 
    (0,0,0), (0,1,3), (0,2,1), (0,3,7), (0,4,5), (0,5,9), (0,6,8), (0,7,6), (0,8,9), (0,9,2),
    (1,0,7), (1,1,0), (1,2,9), (1,3,2), (1,4,1), (1,5,5), (1,6,4), (1,7,8), (1,8,6), (1,9,3),
    (2,0,4), (2,1,2), (2,2,0), (2,3,6), (2,4,8), (2,5,7), (2,6,1), (2,7,3), (2,8,5), (2,9,9),
    (3,0,1), (3,1,7), (3,2,5), (3,3,0), (3,4,9), (3,5,8), (3,6,3), (3,7,4), (3,8,2), (3,9,6),
    (4,0,6), (4,1,1), (4,2,2), (4,3,3), (4,4,0), (4,5,4), (4,6,5), (4,7,9), (4,8,7), (4,9,8),
    (5,0,3), (5,1,6), (5,2,7), (5,3,4), (5,4,2), (5,5,0), (5,6,9), (5,7,5), (5,8,8), (5,9,1),
    (6,0,5), (6,1,8), (6,2,6), (6,3,9), (6,4,7), (6,5,2), (6,6,0), (6,7,1), (6,8,3), (6,9,4),
    (7,0,8), (7,1,9), (7,2,4), (7,3,5), (7,4,3), (7,5,6), (7,6,2), (7,7,0), (7,8,1), (7,9,7),
    (8,0,9), (8,1,4), (8,2,3), (8,3,8), (8,4,6), (8,5,1), (8,6,7), (8,7,2), (8,8,0), (8,9,5),
    (9,0,2), (9,1,5), (9,2,8), (9,3,1), (9,4,4), (9,5,3), (9,6,6), (9,7,7), (9,8,9), (9,9,0);

     SELECT @result = value, @idx = @idx + 1 FROM @damm WHERE  @idx <= @length - 1 AND inter = @result AND input = RIGHT(LEFT(@txt, @idx),1)
/*
    while @length > 0
    begin
        SELECT top 1 @result = value, @idx = @idx + 1, @length = @length - 1 FROM @damm WHERE inter = @result AND input = RIGHT(LEFT(@txt, @idx),1)
    end;
*/
    SELECT @result, @idx , @length

/*
  RETURN @result;
END
GO

SELECT dbo.fn_damm( 572 )
*/
1 дек 15, 23:41    [18500293]     Ответить | Цитировать Сообщить модератору
 Re: while переконвертировать в однострочный select  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20614
А что за задача - "догадайся, мол, сама"?
2 дек 15, 09:24    [18500980]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить