創建一個函數:
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中有或沒有空格)。
這聽起來像我的問題相反。我想要的訂單是數字,它沒有問題。我的問題是與WHERE子句。雖然也許有一種方法可以將ENUM字段轉換爲數值並使用它?現在對我來說無所謂,我在近一年前問過這個問題,我什至不記得它是什麼... – DisgruntledGoat 2009-10-13 15:35:41