MySQL中的子字符串

时间:2009-10-24 12:07:42

标签: sql mysql

我正在尝试在MySQL表中插入一个字符串。但以下不是我要找的。

select substring_index('3|5|6|asdf asd|6|0|NULL', '|', 1) as first,
substring_index('3|5|6|asdf asd|6|0|NULL', '|', 2) as second,
substring_index('3|5|6|asdf asd|6|0|NULL', '|', 3) as third,
substring_index('3|5|6|asdf asd|6|0|NULL', '|', 4) as forth,
substring_index('3|5|6|asdf asd|6|0|NULL', '|', 5) as fifth

+-------+--------+-------+----------------+------------------+
| first | second | third | forth          | fifth            |
+-------+--------+-------+----------------+------------------+
| 3     | 3|5    | 3|5|6 | 3|5|6|asdf asd | 3|5|6|asdf asd|6 | 
+-------+--------+-------+----------------+------------------

+

我希望5作为秒,6作为第三,'asdf asd'作为第四列。在MySQL可以吗?

3 个答案:

答案 0 :(得分:6)

substring_index(substring_index('3|5|6|asdf asd|6|0|NULL', '|', 2), '|', -1)

给出5

substring_index(substring_index('3|5|6|asdf asd|6|0|NULL', '|', 3), '|', -1)

给出6

等等

答案 1 :(得分:1)

您可以将其拆分为分隔符。 Mysql缺少执行此操作的功能,但您可以创建一个:

create function split_string(stringy varchar(128), lim varchar(3),posi int)
  returns varchar(255)
  return replace(substring(substring_index(stringy, lim, posi),
    length(substring_index(stringy, lim, posi -1)) + 1), lim, '');

为简单起见,我们将var设置为'3 | 5 | 6 | asdf asd | 6 | 0 | NULL'...

set @cow='3|5|6|asdf asd|6|0|NULL';
select split_string(@cow,'|',1) as first,split_string(@cow,'|',2) as second,
split_string(@cow,'|',3) as third,split_string(@cow,'|',4) as fourth,
split_string(@cow,'|',5) as fifth,split_string(@cow,'|',6) as sixth;

答案 2 :(得分:0)

听起来像你缺少指定获取子字符串的索引,因此你总是从原始字符串的开头开始。我不太熟悉mysql语法,但检查substring_index函数是否支持这个。


SUBSTRING_INDEX(STR,DELIM,计数) 在分隔符delim的计数出现之前,从字符串str返回子字符串。如果count为正数,则返回最终分隔符左侧的所有内容(从左侧开始计算)。如果count为负数,则返回最终分隔符右侧的所有内容(从右侧开始计算)。搜索delim时,SUBSTRING_INDEX()执行区分大小写的匹配。

的MySQL> SELECT SUBSTRING_INDEX('www.mysql.com','。',2);          - > 'www.mysql' MySQL的> SELECT SUBSTRING_INDEX('www.mysql.com','。', - 2);          - > 'mysql.com' 此功能是多字节安全的。 来自here