在MySQL中,我希望能够'31 - 7'
在另一个值=时搜索'7 - 31'
.我会用什么语法来分解MySQL中的字符串?在PHP中,我可能会使用explode(' - ',$string)
它们并将它们组合在一起.有没有办法在MySQL中这样做?
背景:我正在使用体育比分,并希望尝试得分相同的比赛(以及同一日期) - 每支球队的列出得分与对手的数据库记录相比是倒退的.
理想的MySQL调用是:
Where opponent1.date = opponent2.date
AND opponent1.score = opponent2.score
Run Code Online (Sandbox Code Playgroud)
(opponent2.score
需要opponent1.score
倒退).
Arm*_* P. 69
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, '');
Run Code Online (Sandbox Code Playgroud)
用法:
SELECT SPLIT_STRING('apple, pear, melon', ',', 1)
Run Code Online (Sandbox Code Playgroud)
上面的例子将返回apple
.我认为在MySQL中返回数组是不可能的,因此您必须指定明确返回的事件pos
.如果您成功使用它,请告诉我.
小智 47
我试着用 SUBSTRING_INDEX(string,delimiter,count)
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
Run Code Online (Sandbox Code Playgroud)
在mysql.com上查看更多信息 http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_substring-index
Dis*_*yal 23
您可以这种方式使用存储过程..
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 ;
Run Code Online (Sandbox Code Playgroud)
示例电话:
SET @str = "The quick brown fox jumped over the lazy dog";
SET @delim = " ";
CALL explode(@delim,@str);
SELECT id,word FROM temp_explode;
Run Code Online (Sandbox Code Playgroud)Cro*_*zin 17
首先,您应该更改数据库结构 - 在这种情况下,得分是某种复合值,应该存储在两列中,例如.score_host
,score_guest
.
MySQL不提供explode()
等效的,但在这种情况下,您可以使用SUBSTRING()
和LOCATE()
切断主机和访客的分数.
SELECT
CONVERT(SUBSTRING(score, 1, LOCATE('-',score) - 2) USING INTEGER) as score_host,
CONVERT(SUBSTRING(score, LOCATE('-',score)+2) USING INTEGER) as score_guest
FROM ...;
Run Code Online (Sandbox Code Playgroud)
CONVERT()
用于将字符串"23"
转换为数字23
.
使用此功能。它像一种魅力。替换“ |” 具有要爆炸/拆分的字符,值1,2,3等基于数据集中的条目数:Value_ONE | Value_TWO | Value_THREE。
SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 1), '|', -1) AS PSI,
SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 2), '|', -1) AS GPM,
SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 3), '|', -1) AS LIQUID
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。
归档时间: |
|
查看次数: |
168998 次 |
最近记录: |