2015-10-13 119 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| 
+-------------------+