Как я могу добавить 2 цифры вместе в SQL Server 2000 - PullRequest
0 голосов
/ 27 ноября 2009

предположим, у меня есть номер 62. Он состоит из 2 цифр

Как можно сложить 2 цифры вместе, разделить на 10, и если результат = что-то вроде 6.2, просто возьмите напоминание

 declare @Number int,@Result int
 set @Number =62

 if len(@Number) > 1
 set  @Result=????=--Add 6 and 2 =8

 set @result=@result % 10  --Mod operator

  print @result 

 -- the result should be 2 in this case

что я делаю не так?

Большое спасибо

Ответы [ 6 ]

1 голос
/ 27 ноября 2009

У меня нет возможности это попробовать:

DECLARE @Number VARCHAR(2) 
SET @Number = '62'

declare @firstNum INT, @secondNum INT
SET @firstNum = CAST(SUBSTRING(@Number, 1, 1) AS INT)
SET @secondNum = CAST(SUBSTRING(@Number, 2, 1) AS INT)

DECLARE @Result int

SET @Result = (@firstNum + @secondNum) % 10
1 голос
/ 27 ноября 2009
set @tens = floor(@Number / 10);
set @ones = @number - @tens;
set @Result = @tens + @ones;

Или используйте left и right для доступа к подстрокам.

1 голос
/ 27 ноября 2009

Я думаю @Number % 10 - это то, что вы ищете. Возвращает последнюю цифру любого числа. 62 -> 2, 97 -> 7 и т. Д. *

Обновление:

Возможно, я неправильно понял вопрос. Может быть, вы хотите 10 % ((@Number / 10) + @Number) вместо.

(@Number / 10) + @Number - сумма цифр двузначного числа.

0 голосов
/ 27 ноября 2009

Так что, я думаю, вы хотите что-то вроде этого - проанализируйте строку, представляющую ваше число, сложив отдельные цифры в виде целочисленных значений. Это дает вам общий результат в конце - тогда вы делаете все, что вам нужно с этим делать. Этот код работает для любой длины строки (до 50 символов = 50 цифр в исходном номере):

DECLARE @Number INT 
SET @Number = 62

DECLARE @NumString VARCHAR(50)
SET @NumString = CAST(@Number AS VARCHAR(50))

DECLARE @Index INT
SET @Index = 1

DECLARE @Sum INT
SET @Sum = 0

WHILE @Index <= LEN(@NumString)
BEGIN
   SET @Sum = @Sum + CAST(SUBSTRING(@NumString, @Index, 1) AS INT)
   SET @Index = @Index + 1
END

SELECT @Sum AS 'Sum of all digits'

При исходном значении «62» для @Number я получаю результат 8 - теперь вы можете продолжать использовать это значение.

Если вам часто нужна эта функция, я бы, вероятно, инкапсулировал ее в пользовательскую функцию, чтобы вы могли вызывать ее из любого места в вашем коде.

0 голосов
/ 27 ноября 2009

Попробуйте это

declare @myNumber float,@result float  
set @myNumber = 62 

select 
@result = (case when len(@myNumber) = 1 then @myNumber 
  else (@myNumber /10) + cast(@myNumber as int) % 10 end)

select [Output] = STUFF(
    cast(@result as varchar(50))
    ,1
    ,charindex('.',cast(@result as varchar(50)))    
    ,'')

Output
2

Надеюсь, это поможет

И если вы просто хотите добавить 2 числа, попробуйте это (хотя это было реализовано выше)

declare @myNumber int,@result int  
set @myNumber = 62 

select 
Result = (case when len(@myNumber) = 1 then @myNumber 
else (@myNumber /10) + @myNumber % 10 end)

Result
8
0 голосов
/ 27 ноября 2009

Если номер всегда состоит из двух цифр, я бы использовал LEFT(@Number,1) и RIGHT(@Number,1) для доступа к каждой цифре. Если это не так, прокомментируйте, и я помогу вам с циклом, который вам понадобится.

Еще более острая проблема в том, что вы ожидаете 2, но результат 8 мод 10 равен 8. Если вы ищете 2, сумма равна 10 мод 8 (10 % @Result).

В любом случае, ответь мне, если это не совсем соответствует твоему желанию.

...