2011-09-10 7 views
9

Potrzebuję wybrać wiersz z poniższej tabeli, ale problemem jest wartość w $row['city'] jest tekstowym reprezentantem wartości i potrzebuję jej numeru (Toronto = 2). (Tak samo jak wtedy, gdy INSERT INTO i używamy liczb zamiast tekstu)Jak wybrać numer wartości typów ENUM w MySql?

Wnioski Struktura Tabela:

req_id INT 
uname VARCHAR(30) 
city ENUM('New York', 'Toronto', 'Las Vegas') 

Odpowiedz

12

Wystarczy zmusić city w kontekście numerycznym, z fine manual:

Po uzyskaniu wartości ENUM w kontekście numerycznym zwracany jest indeks wartości kolumny. Na przykład, można pobrać wartości liczbowych z kolumny ENUM tak:

mysql> SELECT enum_col+0 FROM tbl_name; 

Więc chcesz tego rodzaju rzeczy:

select req_id, city+0 
from your_table 
where city = 'Toronto' 

BTW, można wstawić enum przy użyciu ciąg lub reprezentacja całkowita.

+0

Dziękuję bardzo, zaoszczędziło mi to dużo czasu. –

+0

+0 to łatwa i łatwa modyfikacja skrótu CAST (... AS UNSIGNED), jak się wydaje. Fajnie i dzięki! – Steini

2

Można użyć funkcji CAST. Numer documentation nie wspomina o tym konkretnym przypadku użycia, ale działa zgodnie z oczekiwaniami. Wolę to, ponieważ wygląda elegancko i wyraźnie:

SELECT CAST(city AS UNSIGNED) FROM your_table; 
+0

Pamiętaj jednak, że w serwerze MySQL 5.5.38 (Ubuntu 12.04) to rozwiązanie nie działa, jeśli tabela jest widokiem, który bezpośrednio odwzorowuje kolumnę ENUM. Rozwiązanie enum_col + 0 działa również w wersji 5.5.38. – ddirect