在MySQL数据库中,我有一个包含itemID,itemName和其他一些字段的表。
示例记录(分别为itemID和itemName):
vaX652bp_X987_foobar,FooBarItem
X34_bar,BarItem
tooX56,TOOX_What
我想写一个查询,它给我一个输出:
652,FooBarItem
34,BarItem
56,TOOX_What
换句话说,我想从itemID列中提取出数字。但条件是提取的数字应该是itemID列中第一个出现字符“X”后出现的数字。
我目前正在尝试使用locate()和substring()但是还没有(还)实现我想要的......
<击> 修改 与问题无关 - 任何人都能看到这个问题的所有答案(目前是两个)吗?我只看到“soulmerge”的第一个答案。有什么想法吗?百万美元的问题 - 我刚发现一个错误吗?! 击>
答案 0 :(得分:1)
在mysql中这是一个可怕的事情,因为它不支持提取正则表达式匹配。我宁愿建议将数据拉入您选择的语言并在那里进行处理。如果您真的必须在mysql中执行此操作,则使用LOCATE和SUBSTRING与多个CASE的不可读组合是我唯一能想到的。
答案 1 :(得分:1)
为什么不尝试创建第三列,您可以在插入记录时(在PHP中分隔数字)存储,仅数字。所以这样你就可以使用更多的空间来节省大量的处理。
表:
vaX652bp_X987_foobar,652,FooBarItem
X34_bar,34,BarItem
tooX56,56,TOOX_What
答案 2 :(得分:1)
这不可读:
SELECT 0+SUBSTRING(itemID, LOCATE("X", itemID)+1), itemName FROM tableName