2015-10-13 132 views

回答

0

雖然我沒有測試它,這應該解決您的問題。

SELECT `mystring`, 
    SUBSTRING_INDEX(mystring,'-',1) AS part1, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(mystring,'-',2),'-',-1) AS part2, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(mystring,'-',3),'-',-1) AS part3, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(mystring,'-',4),'-',-1) AS part4, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(mystring,'-',5),'-',-1) AS part5, 
FROM my_table; 

------------------------------------------------------------------------------ 
| mystring       | part1 | part2 | part3 | part4 | part5 | 
------------------------------------------------------------------------------ 
| 1111-2222-3-4-55-123456789| 1111 | 2222 | 3  | 4  | 55 | 

這是分裂與增加指數數量和通過第2部分的每個部分的最後指數重新拆分它的文字PART5

+0

Thanks..it works perfect –

4
$stringElements = explode('-', $string); 
echo $stringElements[0];// 1111 
echo $stringElements[1];// 2222 
echo $stringElements[2];// 3 
echo $stringElements[3];// 4 
echo $stringElements[4];// 55 
$stringElements[5];// 123456789
+0

我需要做的是在SELECT語句在我的SQL :-(它完全在PHP,但如果你能在MySQL查詢HEP請 –

+2

然後爲什麼你在標籤列表中包含php? – Shadow

0

如果字符串中的每個部分的長度是恆定的,那麼

select replace(left(fieldname,16),'-','') as alias from table 

會做的伎倆。

UPDATE:

如果你需要有一個單獨的字段中的每個單獨的值,那麼這是一個稍微複雜些:

SELECT REPLACE(SUBSTRING(SUBSTRING_INDEX(fieldname, '-', 1), LENGTH(SUBSTRING_INDEX(fieldname,'-', 0)) + 1) as first, 
REPLACE(SUBSTRING(SUBSTRING_INDEX(fieldname, '-', 2), LENGTH(SUBSTRING_INDEX(fieldname,'-', 1)) + 1) as second, 
... 
FROM table 
+0

如果長度是可變的,那麼我將如何處理這個?> –

+0

看到更新的答案 – Shadow

+0

響應錯誤:-( –

0

您可以創建功能:

CREATE FUNCTION SPLIT_STR(
    x VARCHAR(255), 
    delim VARCHAR(12), 
    pos INT 
) 
RETURNS VARCHAR(255) 
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), 
    LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), 
    delim, ''); 

和然後使用它像

SELECT SPLIT_STR('1-2-3', '-', 1); 

它將返回1.所有這些例子你c一個輕鬆構建自己的查詢

來源:http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

0
SELECT * FROM ints; 
+---+ 
| i | 
+---+ 
| 0 | 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
+---+ 

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX('1111-2222-3-4-55-123456789','-',i+1),'-',-1) x FROM ints; 
+-------------------+ 
| x     | 
+-------------------+ 
| 1111    | 
| 2222    | 
| 3     | 
| 4     | 
| 55    | 
| 123456789| 
+-------------------+