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

Откуда: Тверь
Сообщений: 882
Есть строка в которой 20 чисел, нужно вырезать нечетные числа, сложить их и умножить на число.
Подходят любые варианты, функции процедуры и т.д.
20 окт 11, 16:51    [11474109]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
PG81
Есть строка в которой 20 чисел, нужно вырезать нечетные числа, сложить их и умножить на число.
Подходят любые варианты, функции процедуры и т.д.
Вам как - словами ответ описать?
Вроде тут не литераьурный кружок.
Может, скрипт какой напишете, а?
20 окт 11, 17:08    [11474291]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
iap,

строка в поле таблицы типа varchar(20), нужно записать результат в другое поле типа integer. Необходмо волнить дйстиве только для одной записи.

значение поля например '23456234643567345445'
20 окт 11, 17:16    [11474386]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35381
Блог
PG81,

Например так:
- в цикле пробегаете по всем элементам строки
- на каждой итерации проверяете остаток от деления на 2, делаете вывод и четности/нечетности
- складываете, если число нечетное
20 окт 11, 17:25    [11474491]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
Начинающий SQL 2008
Member

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

declare @bred varchar(20)

set @bred = '23456234643567345445'

;with cte (x) as (
  select substring(@bred,number,1)
  from master.dbo.spt_values
  where type = 'p' and number between 1 and len(@bred)
)
select sum(cast(x as int))
from cte
where cast(x as int) & 0x00000001 = 1
20 окт 11, 17:39    [11474635]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Критик, автор не сообщил, числа должны быть нечётные по значению или по порядку :)
20 окт 11, 17:40    [11474646]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
Даже покороче можно:

select sum(cast(substring(@bred,number,1) as int))
from master.dbo.spt_values
where type = 'p' and number between 1 and len(@bred)
and cast(substring(@bred,number,1) as int) & 0x00000001 = 1
20 окт 11, 17:42    [11474663]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Shakill
Критик, автор не сообщил, числа должны быть нечётные по значению или по порядку :)
Он вообще не говорил, что он называет "числами".
Может, цифры? Разделителей же нет.
20 окт 11, 17:43    [11474673]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
iap, да по примеру уже вроде понятно, что цифры
иначе нужно знать количество разрядов в числе
или же задача не имеет решения
20 окт 11, 17:46    [11474699]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
НеЗадача
Guest
Есть масса готовых реализаций Контрольное число
20 окт 11, 19:17    [11475182]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
из строки вырезать нечетные по порядку цифры ис ложить их
21 окт 11, 09:44    [11476551]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
Начинающий SQL 2008,

скажи а что означает строка

[число] & 0x00000001
21 окт 11, 09:56    [11476607]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
AHDP
Member

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

& - остаток от деления
21 окт 11, 10:02    [11476643]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
alter proc TestSubNumber
@Number string
as
begin
    declare @i integer
    declare @c integer
    declare @tmp string
    declare @EvenSum integer --четный
    declare @OddSum integer  --нечетный
    
    set @EvenSum=0 --четный
    set @OddSum=0  --нечетный
    set @i=1 
    set @c=len(@Number)
    while @i <= @c begin
      if (@i & 1)=1 
      begin --нечетный символ
        set @Tmp=substring(@Number,@i,1);
        if @Tmp in ('0','1','2','3','4','5','6','7','8','9')
          set @OddSum=@OddSum+cast(@Tmp as integer)
      end
      else
      begin --четный символ
        set @Tmp=substring(@Number,@i,1);
        if @Tmp in ('0','1','2','3','4','5','6','7','8','9')
          set @EvenSum=@EvenSum+cast(@Tmp as integer)      
      end 
      set @i=@i+1
    end
    select @OddSum+@EvenSum
end
21 окт 11, 10:08    [11476675]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
тут еще маленькое дополнение есть
нужно определить минимальное число которое нужно добавить к числу, чтобы получить сумму кратную 10
21 окт 11, 10:10    [11476689]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
iljy
Member

Откуда:
Сообщений: 8711
AHDP
PG81,

& - остаток от деления

Че???? Какой в задницу остаток? Это битовое сложение. Остаток - это %.

PG81,

и в чем проблема? Вы не можете округлить число вверх до десятков?
21 окт 11, 10:34    [11476810]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
iljy
Member

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

тьфу, не сложение, а умножение конечно.
21 окт 11, 10:34    [11476812]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
declare @i integer
set @i = 2346523
select 10-@i%10
21 окт 11, 12:00    [11477559]     Ответить | Цитировать Сообщить модератору
 Re: Как в запросе сложить нечетные числа строки  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
PG81
Начинающий SQL 2008,
скажи а что означает строка
[число] & 0x00000001

Идею взял отсюда:
Узнать четное ли число...

Мануал:
& (побитовое И) (Transact-SQL)
21 окт 11, 12:45    [11478070]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить