经过一番尝试和错误后,我想出了以下查询,它可以满足我的需要。基本上,我将数字从字符串末尾分离出来,然后在分离下一个数字之前删除那么多字符。version1列仅限于正2位数字,但这是我可以接受的限制。
SELECt IF(CAST(RIGHt(SUBSTRING_INDEX(LEFt(version,CHAR_LENGTH(version) - CHAR_LENGTH(SUBSTRING_INDEX(version, '.', -3)) - 1), '.', -1),2) AS DECIMAL) > 0, CAST(RIGHt(SUBSTRING_INDEX(LEFt(version,CHAR_LENGTH(version) - CHAR_LENGTH(SUBSTRING_INDEX(version, '.', -3)) - 1), '.', -1),2) AS DECIMAL), CAST(RIGHt(SUBSTRING_INDEX(LEFt(version,CHAR_LENGTH(version) - CHAR_LENGTH(SUBSTRING_INDEX(version, '.', -3)) - 1), '.', -1),1) AS DECIMAL)) AS version1, SUBSTRING_INDEX(LEFt(version,CHAR_LENGTH(version) - CHAR_LENGTH(SUBSTRING_INDEX(version, '.', -2)) - 1), '.', -1) as version2, SUBSTRING_INDEX(LEFt(version,CHAR_LENGTH(version) - CHAR_LENGTH(SUBSTRING_INDEX(version, '.', -1)) - 1), '.', -1) as version3, SUBSTRING_INDEX(version, '.', -1) as version4FROM VersionHAVINg version1 >= 5;



