创建一个函数:
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 中有或没有空格)。