e.g。我想从下表中选择所有行,其中数据包含大于或等于5的值。即第11,13,14和16行。
╔════╦═══════════════════╗
║ ID ║ Data ║
╠════╬═══════════════════╣
║ 10 ║ 2 or 3 ║
║ 11 ║ 5 and 6 ║
║ 12 ║ 3 or 4 ║
║ 13 ║ 5 or 6(Optional) ║
║ 14 ║ 5 ║
║ 15 ║ 1 or 2 ║
║ 16 ║ 6 (Optional) or 3 ║
╚════╩═══════════════════╝
答案 0 :(得分:0)
我解决了这个问题。
CREATE FUNCTION explode(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 ID,REPLACE(Data,'(Optional)','') AS data FROM `Temp` WHERE data >= 5 OR TRIM(explode(explode(data,'and',1),'or',1)) >= 5 OR TRIM(explode(explode(data,'and',1),'or',2) ) >=5 OR TRIM(explode(explode(data,'and',2),'or',1) ) >=5 OR TRIM(explode(explode(data,'and',2),'or',2) ) >=5