2014-09-30 2 views
0

У меня есть поле, имеющее значение вида store878. Я хотел бы иметь 878 из select statement. Как я могу получить, что номер от оператора выбораКак получить номер только из строкового поля mysql

select 
    store, 
    address 
from 
    detail, 
    store_number 
where 
    store (here i would like to have number) = store_mumber.id 
+2

Ваш дизайн базы данных неверен. Вы должны использовать таблицу 'stores' с идентификатором, а не полями с индивидуальным номером. –

+0

Это просто уродливо. Любой ответ не помог бы решить проблему с корнем. – Linger

+0

, если у вас должен быть алфавитно-цифровой ... и предполагается, что текст/номер имеет длину фикса, а затем попытайтесь получить часть строки, чтобы разделить ее. В любом случае, я проголосую за рекомендацию Роберта Х. – NKD

ответ

1

Я не проверял это, чтобы убедиться, что это работает:

SELECT store, address 
FROM detail d 
INNER JOIN store_number s 
    ON CAST(SUBSTRING(d.store, LOCATE('%[0-9]%', d.store)) AS int) = s.id 

Но вы действительно должны рассмотреть вопрос об изменении структуры базы данных.

+0

К сожалению, 'LOCATE()' только фиксирует совпадения строк, а не подстановочные или регулярные совпадения. Однако ваш ответ заставил меня придумать рабочую альтернативу, хотя, как вы говорите, это по-прежнему очень плохая идея. Если число находится в конце строки, проверьте результат: «SELECT CAST (REVERSE (CAST (REVERSE ('haxor1337') AS UNSIGNED)) AS UNSIGNED);' он ведет себя так, как ожидалось (возвращается '1337' в этом дело). Тем не менее, yikes, проблема с корнем должна быть исправлена. –

Смежные вопросы