创建一个函数:
CREATE fEnumIndex(_table VARCHAR(50), _col VARCHAR(50), _val VARCHAR(50))
RETURNS INT DETERMINISTIC
BEGIN
DECLARE _lst VARCHAR(8192);
DECLARE _ndx INT;
SELECT REPLACE(REPLACE(REPLACE(COLUMN_TYPE,''', ''',','),'enum(',''),')','')
FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND
TABLE_NAME=_table AND COLUMN_NAME=_col INTO _lst;
SET _ndx = FIND_IN_SET(_val, _lst);
RETURN _ndx;
END
然后在查询中使用它,如下所示:
SELECT * FROM MyTable WHERE Status < fEnumIndex('MyTable','Status','delta') ;
SELECT REPLACE(REPLACE(REPLACE(COLUMN_TYPE,''', ''',','),'enum(',''),')','')
会将COLUMN_TYPE
,例如ENUM('alpha','beta','gamma','delta','omega')
转换为逗号分隔的列表:'alpha,beta,gamma,delta,omega'
。然后FIND_IN_SET(_val,_lst)
获取索引。
你需要注意的唯一问题是如何定义ENUM(项目之间是否有空格)以及内部最深层的REPLACE
(from_string中是否带有空格)。