MySQL - извлечение чисел из строк - PullRequest
2 голосов
/ 06 апреля 2009

В базе данных MySQL у меня есть таблица, которая содержит itemID, itemName и некоторые другие поля.

Примеры записей (соответственно itemID и itemName):

vaX652bp_X987_foobar, FooBarItem
X34_bar, BarItem
tooX56, TOOX_What

Я хочу написать запрос, который выдаст мне вывод:

652, FooBarItem
34, BarItem
56, TOOX_What

Другими словами, я хочу извлечь номер из столбца itemID. Но условие состоит в том, что извлеченное число должно быть числом, которое встречается после первого вхождения символа «X» в столбце itemID.

В настоящее время я пытаюсь использовать locate () и substring (), но не могу (пока) добиться того, чего хочу ..

EDIT: Не связанный с вопросом - Может ли кто-нибудь увидеть все ответы (в настоящее время два) на этот вопрос? Я вижу только первый ответ "soulmerge". Есть идеи почему? И вопрос на миллион долларов - я только что нашел ошибку ?!

Ответы [ 3 ]

1 голос
/ 22 апреля 2009

Почему бы вам не попытаться создать третий столбец, в котором вы можете хранить в момент вставки записи (разделяя число в PHP или около того) только номер. Таким образом, вы сэкономите немного места, чтобы сэкономить много обработки.

Таблица:

vaX652bp_X987_foobar, 652, FooBarItem

X34_bar, 34, BarItem

tooX56, 56, TOOX_What

1 голос
/ 19 июня 2015

Это не так нечитаемо:

SELECT 0+SUBSTRING(itemID, LOCATE("X", itemID)+1), itemName FROM tableName
1 голос
/ 06 апреля 2009

Это ужасная вещь в mysql, так как она не поддерживает извлечение совпадений регулярных выражений. Я бы порекомендовал перенести данные на выбранный вами язык и обработать их там. Если вы действительно должны сделать это в mysql, используйте нечитаемые комбинации LOCATE и SUBSTRING с несколькими CASE s - это единственное, что я могу думать о.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...