需要使用MYSQL中的分隔符分隔字符串
我在MYSQL表字段中有这个字符串1111-2222-3-4-55-123456789
。需要使用MYSQL中的分隔符分隔字符串
我需要做的是将前面的5个参数分开,用-
分开。就像我需要单独:
1111
2222
3
4
55
虽然我没有测试它,这应该解决您的问题。
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
$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
我需要做的是在SELECT语句在我的SQL :-(它完全在PHP,但如果你能在MySQL查询HEP请 –
然后为什么你在标签列表中包含php? – Shadow
如果字符串中的每个部分的长度是恒定的,那么
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
您可以创建功能:
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/
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|
+-------------------+
Thanks..it works perfect –