2013-04-26 31 views
1

我遇到了一個mysql查詢的問題,我有一個包含訂單金額(表中的第一個int)和它的描述的表。不幸的是我不能改變數據庫結構。我需要在查詢中拆分它們,我有以下查詢;Mysql - 拆分表內容,訂單金額及其說明

Load table: 
3 pallets 120 x 100 x 100 
12 pallet 120 x 100 x 84 


SELECT *, 
IF (load * 1! = 0, LEFT (load, 1), '1 ') AS cargo_quantity, 
IF (load * 1! = 0, SUBSTR (load, 2), load) AS cargo_description 
FROM transport 

查詢在金額低於10時起作用,當數字爲10或更高時,查詢將失效。我真的可以用一些幫助來解決這個問題,有什麼建議嗎?

+0

所以,你有一個包含多個數據塊的領域,並且您希望數據庫引擎爲您打破這些碎片......這些碎片如何一開始就融合在一起?我懷疑不是在數據庫引擎中,但可能在你的應用程序代碼中?那麼爲什麼不在你的應用程序代碼中拆分呢?如果你真的希望數據庫爲你做這件事,這表明這些作品真的應該存儲在單獨的列中 - 這就提出了*爲什麼*你不能改變數據庫結構*的問題? – eggyal 2013-04-26 08:50:54

+0

look [this](http://stackoverflow.com/questions/2696884/mysql-split-value-from-one-field-to-two)。在你的情況下,這可能可以工作:SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(load,'',1),'',-1)as cargo_quantity, SUBSTRING_INDEX(SUBSTRING_INDEX(load,'',2),'',-1)as cargo_description FROM運輸; – 2013-04-26 09:01:03

+0

請給出更大範圍的示例行。特別是那些「非常規」格式 – luksch 2013-04-26 10:00:58

回答

1

如果你確信你的條目的第一個「列」總是被「分隔」,那麼你可以這樣做:

SELECT *, 
    LEFT(loadcolumn, LOCATE(" ",loadcolumn)) AS cargo_quantity, 
    SUBSTR(loadcolumn, LOCATE(" ",loadcolumn)+1) AS cargo_description 
    FROM transport 

和這裏sqlfiddle與工作解決方案:

注該「負載」似乎是mysql keyword。我不確定,所以在我的sqlfiddle中,我重命名了它。

編輯:

這裏是改進的解決方案,如果不存在,你的「第一列」:

SELECT *, 
IF (concat('',(LEFT(loadcolumn, LOCATE(" ",loadcolumn))) * 1) = 
    LEFT(loadcolumn, LOCATE(" ",loadcolumn)), 
    LEFT(loadcolumn, LOCATE(" ",loadcolumn)), '1') AS cargo_quantity, 
IF (concat('',(LEFT(loadcolumn, LOCATE(" ",loadcolumn))) * 1) = 
    LEFT(loadcolumn, LOCATE(" ",loadcolumn)), 
    SUBSTR(loadcolumn, LOCATE(" ",loadcolumn)+1), loadcolumn) AS cargo_description 
FROM transport 

improved sqlfiddle

+0

並不總是有空格,有些字段在開始時沒有數值,例如「PALLET 120 x 100 x 82」,當這種情況發生時,數值應該是1.我想我如果要解決這個問題,我需要一些其他的解決方法 – Nico 2013-04-26 09:52:20

+0

我改進了解決這個問題的答案。如果你喜歡它,請投我:) – luksch 2013-04-26 10:24:29