Обрезка в SQL Management Studio 2008 - PullRequest
0 голосов
/ 31 августа 2010

Я пытаюсь урезать некоторую информацию из таблицы. В столбце есть номер, а затем слово (например, 5 яблок). Мне просто нужно число, чтобы я мог сложить общее количество яблок. Я не могу использовать счетчик, потому что мне нужно перейти по значению (например, 5 яблок для одного, 3 яблока для другого), и счетчик просто вернет, что есть 2 записи, а не вытянуть 5 и 3.

Я пытался использовать SUM, но он тоже не работает.

Может кто-нибудь помочь (или указать мне учебник), который объяснит, как я могу обрезать / извлечь информацию из значения столбцов? Я искал и смог найти только то, как обрезать пробелы (что было бы неплохо, если бы я мог обрезать все и после пробелов, тогда я просто смог бы обрезать после числа)

Ответы [ 3 ]

1 голос
/ 31 августа 2010

Вы можете использовать patindex для поиска первой нецифровой цифры, а затем substring для получения только числовой части строки:

declare @fruit table (id int identity, description varchar(50))
insert @fruit (description) select '3 apples'
union all select '10 apples'
union all select '12 apples'

select  sum(cast(substring(description, 1, FirstNonDigit) as int))
from    (
        select  patindex('%[^0-9]%', description) FirstNonDigit
        ,       description
        from    @fruit
        ) as SubQuery
where   FirstNonDigit > 0

Это печатает 25.

Сказав это, хороший дизайн таблицы поместит номер и описание в два разных столбца.

0 голосов
/ 31 августа 2010

Комбинация суммы, приведения, подстроки и charindex сделает работу, которую я думаю:

Найдите первое вхождение пробела, возьмите подстроку столбца до первой позиции пробела, приведите его как целое числои суммируем.

SELECT SUM(CAST(SUBSTRING(yourColumn, 1, CHARINDEX(' ', yourColumn) -1) AS INT)) 
FROM yourTable

Редактировать: первый символ равен 1 в подстроке

0 голосов
/ 31 августа 2010

Звучит так, как будто вам нужно SubString с CharIndex , Приведение / преобразование результирующего «числа» в int, а затем использовать SUM.

При условии, что за вашим «номером» всегда следуют «Яблоки» (не проверено):

SELECT SUM(CONVERT(int,SUBSTRING(column_name,0,CharIndex(' Apple',column_name)-1))) as numApples FROM table_name;
...