我想分割列中的數據,該列是以文本格式顯示並由'|'分隔。 'mysql將一列分割爲多列
0190000000001000000000| 0150000000002500000000| 0190000000003500000000|
就像上面的列數據一樣,有三部分。根據系統記錄的數據,這些數據部分可以增加或減少。
任何人都可以幫我把上面的文字類型分開。
我想分割列中的數據,該列是以文本格式顯示並由'|'分隔。 'mysql將一列分割爲多列
0190000000001000000000| 0150000000002500000000| 0190000000003500000000|
就像上面的列數據一樣,有三部分。根據系統記錄的數據,這些數據部分可以增加或減少。
任何人都可以幫我把上面的文字類型分開。
使用SUBSTRING_INDEX()函數來實現這一點。你也需要使用循環來獲取所有3個分割的數據。
對於SUBSTRING_INDEX參考, http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php
希望這有助於你
謝謝Gordon Linoff和Harish Chinju – user2772157
請將您的問題改爲已解決。所以其他人可以從中獲得幫助。 :) –
答案是substring_index()
,但要獲得個人價值,你需要使用函數兩次:
select substring_index(col, '|', 1) as element_1,
substring_index(substring_index(col, '|', 2), '|', -1) as element_2,
substring_index(substring_index(col, '|', 3), '|', -1) as element_3
你可以無限延伸到第n個元素。但是有一個問題!如果一列只有兩個值,那麼你會得到重複的值。解決這個問題需要更多的工作。這裏有一種方法:
select substring_index(col, '|', 1) as element_1,
(case when substring_index(col, '|', 2) = substring_index(col, '|', 1) then NULL
else substring_index(substring_index(col, '|', 2), '|', -1)
end) as element_2,
(case when substring_index(col, '|', 3) = substring_index(col, '|', 2) then NULL
else substring_index(substring_index(col, '|', 3), '|', -1)
end) as element_3
你必須使用一種編程語言,而不僅僅是mysql。正如你可以創建一個在SQL中分割的函數,但它永遠不會返回一個數組,所以只用mysql來做你想做的事情幾乎是不可能的。 – CodeBird
網上有很多資源解釋如何做到這一點,或者至少訪問該列表的一個元素。 ([示例](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html))但是,如果你問我,那麼這種事情會顯示一個非常糟糕的數據結構。如果你有多個數據,你應該有多個字段和/或多個記錄... –
@Bartdude,我認爲這就是他想要做的,據我所知他正試圖修復他的表格結構 – CodeBird