如何使用MySQL字符串操作?

时间:2014-10-13 10:06:34

标签: mysql sql substring

我想知道如何在我的数据库上使用MySQL字符串函数。

我有MySQL db以及类似数据

+---+-----------------------+
|id | name                  |
+---+-----------------------+
| 1 | /sun/steave/xyz       |
| 2 | /mon/alan/asdsas      |
| 3 | /sun/mark/we          |
| 4 | /wed/john/rtd         |
| 5 | /thu/mich/dfgsd       |
+---+-------------------   -+

其中name为type varchar(255)

我想只选择名称 i,e(/ sun / steave / xyz)。

我试过

select substr(name,4) from my_table;

(我无法在substring中使用长度,例如(name,4,6),因为名称是动态的)

返回我

steave/xyz 
alan/asdsas
mark/we
john/rtd
mich/dfgsd

我如何只选择表格中的名字? 这可能通过MySQL字符串函数吗?

3 个答案:

答案 0 :(得分:2)

您可以使用几个substring_index来调整/之间的字符串:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(name, '/', 3), '/', -1)
FROM   my_table

编辑:
根据评论中的要求,更多细节。引用substring_index上的文档:

  

SUBSTRING_INDEX(str,delim,count)str出现分隔符count之前,返回字符串delim的子字符串。如果count为正数,则返回最终分隔符左侧的所有内容(从左侧开始计算)。如果count为负数,则返回最终分隔符右侧的所有内容(从右侧开始计算)。

我们以字符串'/sun/steave/xyz'为例。内部substring_idex调用在第3 /之前返回子字符串,因此对于我们的情况,它返回'/sun/steave'。外部substring_index返回最后一个'/'之后的子字符串,因此只有'/sun/steave',它才会返回'steave'

答案 1 :(得分:1)

的内容
select left(right(string.name, length(string.name) - 5), instr( right(string.name, length(string.name) - 5), '/')-1) from (select "/sun/steave/xyz" as name) string

会奏效。

答案 2 :(得分:1)

这可以用XML轻松完成:

SELECT
 MyXML.id
,MyXML.name
,x.value('/NAME[1]/PART[2]','VARCHAR(255)') AS 'PART2'
,x.value('/NAME[1]/PART[3]','VARCHAR(255)') AS 'PART3'
,x.value('/NAME[1]/PART[4]','VARCHAR(255)') AS 'PART4'
FROM (
    SELECT Id, Name
    ,CONVERT(XML,'<NAME><PART>' + REPLACE(Name,'/', '</PART><PART>') + '</PART></NAME>') AS X 
    FROM my_table 
) MyXML

无论如何,你应该重新考虑你的表结构。