2013-08-22 130 views
0

這是輸入柱拆分到另一列

fld_Detail 
Saved dollar rate, gold volume as: 42.61, 1663.40 
312000000000083: Saved as GENT'S RING, , 18K, 11.20, 0.00 
312000000000083: Saved as GENT'S RING, , 18K, 11.20, 0.00 
312000000000104: Saved as NECKLACE W/ CONT. PENDANT GOLD, , 14K, 8.90, 0.00 
312000000000064: 350 
312000000000080: 340 
312000000000082: 340 

如何更改或拆分這組記錄,以實現這種輸出的

fld_DetailNumbers 
312000000000083 
312000000000104 
312000000000064 
312000000000080 
312000000000082 

總之我想要檢索根據第一條記錄''左邊的不同數字

我不知道如何分割整行並檢索其獨特值。

回答

2

我認爲你正在尋找的是這樣的:

select substring(fld_Detail, 1, charindex(':', fld_Detail)-1) 
where isnumeric(substring(fld_detail,1,1)) = 1 

它不是很有效,但隨後你的數據不是很第三範式。

+0

謝謝先生,但我只想找回數字,第一條記錄包含冒號左邊的文字,我想不管它怎麼辦?謝謝! – user2705620

+0

試試我剛剛添加的 – Metaphor

+0

謝謝先生,它的工作就像魔術一樣。對不起,如果它不是第三種常規形式,我不是桌子的製造者,我只是再次點擊其數據,非常感謝你的幫助。 – user2705620

2

你可以用一些字符串操作做到這一點:

select left(fld_detail, charindex(':', fld_detail) - 1) as valueToLeftOfColon 

如果你想這是一個數,將其轉換:

select cast(left(fld_detail, charindex(':', fld_detail) - 1) as decimal(18, 0)) 

編輯:

要提取只有數字,你可以這樣做:

select (case when fld_detail like '%:%' and fld_detail not like '%[^0-9]%:' 
      then cast(left(fld_detail, charindex(':', fld_detail) - 1) as decimal(18, 0)) 
     end) 
. . . 
where fld_detail like '%:%' and fld_detail not like '%[^0-9]%:'; 
+0

謝謝你這麼多先生,但是第一條記錄怎麼刪除我的字符串包含 '**節省了美元匯率,黃金體積**' ,因爲我只需要數量非常感謝你對你的幫助很大。 – user2705620

+0

簡而言之先生我想只檢索數字,第一個記錄包含在冒號左邊的文本我想忽略它,我想忽略任何包含冒號左邊文本的記錄我該怎麼辦?謝謝您! – user2705620

+0

謝謝先生您的時間我收到這種錯誤 **將數據類型varchar轉換爲數字時出錯。** – user2705620