我想知道如何在我的数据库上使用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字符串函数吗?
答案 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
无论如何,你应该重新考虑你的表结构。