Обрезка в SQL Management Studio 2008

0

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

Я пробовал использовать СУММ, но он тоже не работает.

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

  • 0
    Я также пробовал обрезать по длине, но если способ, которым я делаю это неправильно, я тоже не смог, потому что я могу обрезать длину для яблок, но если у меня есть 10 яблок, это добавляет к длине, а затем делает отделка не работает должным образом для моих нужд. Левая отделка может удалить яблоки / яблоки, а затем правая отделка просто удаляет цифры. Чтобы добавить к вопросу, я думаю, возможно ли удалить только номер и перейти оттуда? Если это возможно, я мог бы удалить номер (максимум 2 цифры) с пробелом / без, а затем обрезать потенциальный пробел ... Еще раз спасибо
  • 0
    я только что отредактировал свой ответ для вашего комментария.
Теги:
sql-server-2008
extract
trim

3 ответа

0
Лучший ответ

Комбинация sum, cast, substring, charindex будет выполнять работу, я думаю:

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

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

Изменить: сначала char равно 1 в подстроке

  • 0
    Спасибо, я немного поиграл с ним, чтобы он заработал до редактирования. Он работает нормально. Большое спасибо, я бы проголосовал за вас, но, как я сказал в последнем ответе, stackoverflow не доверяет моему открытому идентификатору, чтобы я мог войти по какой-то причине.
1

Вы можете использовать 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
    Согласитесь с вашим последним утверждением. Двухколонный дизайн будет иметь гораздо больше смысла. Если число продуктов (например, Apple, Lemons, ...) является фиксированным, я бы также предложил составить таблицу продуктов и связать с ней FK в приведенной выше таблице.
  • 0
    Ну, мой пример не совсем точная копия, но ради примера это были бы только яблоки. Никогда не лимоны или что-нибудь еще. Для целей столбца и этой таблицы это всегда будет яблоко. Если бы это были яблоки и лимоны, было бы разумно заменить их на число, а затем добавить на него надлежащие фрукты (яблоко или лимоны или б / е), но так, как это будет всегда, дона не исправить то, что не сломалось, верно?
Показать ещё 2 комментария
0

Похоже, вам нужно SubString с CharIndex, Вставить/преобразовать полученное "число" в int, а затем использовать SUM.

Предполагая, что ваше "число" всегда сопровождается "Яблоки" (непроверенные):

SELECT SUM(CONVERT(int,SUBSTRING(column_name,0,CharIndex(' Apple',column_name)-1))) as numApples FROM table_name;
  • 0
    Спасибо! Но я не могу голосовать за вас, потому что stackoverflow отказывается распознавать мой логин, хотя я прошел через систему открытого идентификатора
  • 0
    Спасибо за пересмотр, я хотел бы объявить слишком правильные ответы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню