在SQL Management Studio 2008中修剪

时间:2010-08-31 15:26:09

标签: mysql sql-server-2008 extract trim

我正试图从表中修剪一些信息。该列有一个数字,然后是一个单词(例如5个苹果)。我只需要这个数字,这样我就可以总计苹果的总和。我不能使用count,因为我需要按值计算(例如,5个苹果为一个,3个苹果为另一个)并且计数将返回有2个条目而不是拉5和3。

我尝试使用SUM但它也不起作用。

任何人都可以帮助(或指向我的教程),这将解释我如何从列值修剪/提取信息?我一直在寻找并且只能找到如何修剪空间(如果我能在空间之后修剪所有内容会很好,那么我只能在数字之后修剪掉)

3 个答案:

答案 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 CharIndexCast/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