2012-06-07 4 views
1

У меня есть столбец, содержащий смесь букв и цифр. Мне нужно получить первый набор алфавитных символов из столбца. Как только целое число встречается, я не хочу больше .. например:Выписка Mysql только в алфавитном порядке

Возьмите 5 строк:

  • S123J90
  • SF91K88
  • JK12K99
  • X129PL9
  • ABCD123

Мне нужны следующие данные из этих 5 рядов

  • S
  • SF
  • JK
  • X
  • ABCD

Я нашел много разговоров о вложенных ЗАМЕНЫ запросов, но я уверен, что это лучший вариант там?

Примечание: Все строки начинаются с, по меньшей мере, одного алфавитного символом


Update: Я использовал модификацию этой функции http://www.rummandba.com/2011/02/mysql-function-to-remove-non.html следующий

DROP FUNCTION IF EXISTS remove_non_alpha_char_f // 
CREATE FUNCTION remove_non_alpha_char_f (prm_strInput varchar(255)) 
RETURNS VARCHAR(255) 
DETERMINISTIC 
BEGIN 
    DECLARE i INT DEFAULT 1; 
    DECLARE v_char VARCHAR(1); 
    DECLARE v_parseStr VARCHAR(255) DEFAULT ' '; 

WHILE (i <= LENGTH(prm_strInput)) DO 

    SET v_char = SUBSTR(prm_strInput,i,1); 
    IF v_char REGEXP '^[A-Za-z ]+$' THEN #alpha 

     SET v_parseStr = CONCAT(v_parseStr,v_char); 
     SET i = i + 1; 
    ELSE 
    SET i=256; 
    END IF; 

END WHILE; 
RETURN trim(v_parseStr); 
END 

Примечания: Я повторно закодирована функция для этого ответа, поэтому синтаксис может отсутствовать.

+1

Вам нужен mysql, чтобы сделать это за вас? Это довольно просто сделать на любом языке программирования за пределами sql –

+0

Я мог бы сделать это в коде приложения. У меня есть 29M строк, хотя .. Если бы я мог найти быстрый метод в MySql, я уверен, что он будет работать намного быстрее. – Niall

+0

ifound ссылка, которую вы можете найти полезной http://forums.mysql.com/read.php?10,137433,137433 Видимо, ее не просто сделать, и это, конечно, не в моих силах. Лучше всего создать небольшой скрипт и другой столбец (или таблицу). Этот скрипт проходит через все записи один раз, а затем сохраняет извлеченные символы в этом новом столбце. Позже я попытался бы обновить этот столбец, изменив способ записи этих записей. –

ответ

1

Вы можете создать рекурсивную функцию, используя SUBSTRING(), LENGTH(), которая проверяет каждый символ, чтобы увидеть, является ли его алфавитным, а затем добавляет его к результату.

Удалите его, как только он достигнет конца строки или попадет в число.

+0

Спасибо - я закончил модификацию версии этой функции (выведет функцию в ответ): http://www.rummandba.com/2011/02/mysql-function-to-remove-non.html – Niall

0

Для каждой строки, выполните следующие действия:

$split = preg_split("/\d/", $your_str); 

Вы хотите $split[0] из массива, который $split.

Обратите внимание, что это PHP - @Pablo верен, вам действительно нужен MySQL для этого?

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

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