2010-08-31 33 views
0

我試圖從表中修剪一些信息。該列有一個數字,然後是一個單詞(例如5個蘋果)。我只需要這個數字,這樣我就可以總結蘋果的總數。我不能使用計數,因爲我需要去數值(例如,5個蘋果爲一個,3個蘋果爲另一個),計數將返回,有2個條目,而不是拉和5和3.在SQL管理工作室2008中修剪

我已經嘗試使用SUM,但它也不起作用。

任何人都可以幫助(或指向我的教程),將解釋如何我可以修剪/提取信息的列值?我一直在尋找,只能找到如何修剪空間(如果我可以在空間之後修剪所有空間,這將是很好的,然後我可以在數字後修剪掉)

+0

我也嘗試通過長度修剪,但除非我這樣做的方式是不正確的,我也不成功,因爲我可以修剪蘋果的長度,但如果我有10個蘋果,增加了長度和然後使修剪不能正常工作以滿足我的需求。左修剪可以刪除蘋果/蘋果,然後右修剪只是刪除數字。爲了增加我想的問題,是否可以刪除數字並從那裏去?如果可能的話,我可以刪除數字(最大2位數)有/沒有空格,然後修剪潛在空間... 再次感謝 – CSharpProgrammer 2010-08-31 15:34:08

+0

我剛剛編輯了我的答案給你評論。 – Mark 2010-08-31 15:38:16

回答

0

總和,演員子的組合,CHARINDEX將做的工作,我認爲:

找到第一次出現空白時,將列的子串取直到第一個空白位置,將其轉​​換爲整數並將其總和。

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

編輯:第一個字符是串

+0

謝謝,我玩了一下在編輯之前讓它工作它工作正常。非常感謝,我會投票給你,但正如我在最後一個答案中所說的,stackoverflow不相信我的開放標識讓我登錄出於某種原因。 – CSharpProgrammer 2010-08-31 15:43:32

0

聽起來像你需要SubStringCharIndexCast/Convert產生的'數字'爲一個int然後使用SUM。

假設你的「數字」總是跟着「蘋果」(未經測試):

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

謝謝!但我不能投票給你,因爲stackoverflow拒絕承認我的登錄,即使我通過開放的身份識別系統 – CSharpProgrammer 2010-08-31 15:42:31

+0

感謝您的修訂,我希望我能夠聲明太適當的答案 – CSharpProgrammer 2010-08-31 15:54:10

1

您可以使用patindex搜索的第一個非數字,然後substring只得到字符串的數字部分1:

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

同意你最後的聲明。雙列設計會更有意義。如果產品的數量(例如蘋果,檸檬,...)是固定的,我也會建議製作一張產品表,並將FK鏈接到上表中。 – JanW 2010-08-31 15:47:19

+0

那麼我的例子並不完全是抄送,但爲了舉例,它只能是蘋果。從不檸檬或其他任何東西。爲了列和這張表的目的,它將永遠是一個蘋果。如果它曾經是蘋果和檸檬,那麼將其改爲數字,然後在其上添加適當的水果(蘋果或檸檬或水)將是明智的,但對於現在總是如此,不解決什麼沒有壞,對吧? – CSharpProgrammer 2010-08-31 15:52:55

+0

好的,如果你只處理蘋果,類型表就沒有意義;)但是你應該考慮Andromar的建議,具體取決於查詢數據的數量和查詢數據的頻率。如果它很多,你應該確實使用兩列,因爲上述接受的答案效率很低,關於兩列版本。歡迎1月 – JanW 2010-08-31 16:30:53

相關問題