我正试图从表中修剪一些信息。该列有一个数字,然后是一个单词(例如5个苹果)。我只需要这个数字,这样我就可以总计苹果的总和。我不能使用count,因为我需要按值计算(例如,5个苹果为一个,3个苹果为另一个)并且计数将返回有2个条目而不是拉5和3。
我尝试使用SUM但它也不起作用。
任何人都可以帮助(或指向我的教程),这将解释我如何从列值修剪/提取信息?我一直在寻找并且只能找到如何修剪空间(如果我能在空间之后修剪所有内容会很好,那么我只能在数字之后修剪掉)
答案 0 :(得分: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
。
话虽如此,一个好的表设计会将数字和描述放在两个不同的列中。
答案 1 :(得分:0)
听起来你需要SubString CharIndex,Cast/Convert将结果'数字'转换为int,然后使用SUM。
假设您的'号码'后面跟着'苹果'(未经测试):
SELECT SUM(CONVERT(int,SUBSTRING(column_name,0,CharIndex(' Apple',column_name)-1))) as numApples FROM table_name;
答案 2 :(得分:0)
sum,cast,substring,charindex的组合将完成我认为的工作:
找到第一个出现的空格,取出列的子串直到第一个空白位置,将其转换为整数并加总。
SELECT SUM(CAST(SUBSTRING(yourColumn, 1, CHARINDEX(' ', yourColumn) -1) AS INT))
FROM yourTable
编辑:第一个char在子字符串中是1