2014-01-03 5 views
6

У меня есть таблица tab1 с колонной col1, который имеет сложные альфа-то-числовые значения, например:Извлечение альфа и цифровые части из колонки

abc123 
xy45 
def6 
z9 

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

Если два значения имеют согласованные начальные и конечные положения, задание может быть выполнено с помощью substring(), так как вы можете видеть, что начало числовой части изменяется.

Есть ли элегантный способ справиться с этим, или это должно быть сделано с помощью серии союзов каждой возможной начальной точки с использованием регулярного выражения для разделения случаев или свертывания в огромном случае?

+0

http://stackoverflow.com/questions/4537994/php-split-string-into-integer-element-and-string –

+0

http://www.sitepoint.com/forums/showthread.php?939700-Как -do-I-Split-a-alphanumeric-string-in-array –

+1

Возможный дубликат [Удаление номеров из строки в mysql] (http://stackoverflow.com/questions/13855053/removing-numbers-from-string-in -mysql) –

ответ

3

Да, это:

SELECT 
    @col:=col1 AS col, 
    @num:=REVERSE(CAST(REVERSE(@col) AS UNSIGNED)) AS num, 
    SUBSTRING_INDEX(@col, @num, 1) AS word 
FROM 
    tab1 

-будет работать, только если столбец может содержать буквы и цифры, то (как вы описали). Вот почему требуется двойной REVERSE() (иначе CAST() не будет иметь эффекта). Проверьте это demo.

+0

+ 1ed, но только что заметили, что для строк, заканчивающихся на '0', требуется дополнительная осторожность, можно добавить« 1 »в конец каждого значения, а затем обрезать его после' CAST'. – OGHaza

+0

Да, это немного «хулиганское» решение - также нужно заботиться о длине типа данных, поскольку строка может содержать что-либо, в то время как целое число/float ограничено –

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

  • Нет связанных вопросов^_^