为了账号安全,请及时绑定邮箱和手机立即绑定

相当于explode()在MySQL中使用字符串

相当于explode()在MySQL中使用字符串

largeQ 2019-07-27 10:13:31
相当于explode()在MySQL中使用字符串在MySQL中,我希望能够'31 - 7'在另一个值=时搜索'7 - 31'。我会用什么语法来分解MySQL中的字符串?在PHP中,我可能会使用explode(' - ',$string)它们并将它们组合在一起。有没有办法在MySQL中这样做?背景:我正在使用体育比分,并希望尝试得分相同的比赛(以及同一日期) - 每支球队的列出得分与对手的数据库记录相比是倒退的。理想的MySQL调用是:Where opponent1.date  = opponent2.date  AND opponent1.score = opponent2.score(opponent2.score需要opponent1.score倒退)。
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

MYSQL没有explode()内置的类似功能。但是你可以轻松地向你的数据库添加类似的功能,然后从php查询中使用它。该功能将如下所示:

CREATE FUNCTION SPLIT_STRING(str VARCHAR(255), delim VARCHAR(12), pos INT)RETURNS VARCHAR(255)RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos),
       LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1),
       delim, '');

用法:

SELECT SPLIT_STRING('apple, pear, melon', ',', 1)

上面的例子将返回apple。我认为在MySQL中返回数组是不可能的,因此您必须指定明确返回的事件pos。如果您成功使用它,请告诉我。


查看完整回答
反对 回复 2019-07-27
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您可以这种方式使用存储过程..

DELIMITER |CREATE PROCEDURE explode( pDelim VARCHAR(32), pStr TEXT)                                BEGIN                                
  DROP TABLE IF EXISTS temp_explode;                                
  CREATE TEMPORARY TABLE temp_explode (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, word VARCHAR(40));                                
  SET @sql := CONCAT('INSERT INTO temp_explode (word) VALUES (', REPLACE(QUOTE(pStr), pDelim, '\'), (\''), ')');                                
  PREPARE myStmt FROM @sql;                                
  EXECUTE myStmt;                                END |   DELIMITER ;
  • 示例电话:

     SET @str  = "The quick brown fox jumped over the lazy dog"; 
     SET @delim = " "; CALL explode(@delim,@str);SELECT id,word FROM temp_explode;


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 3227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信