2016-09-12 3 views
1

У меня есть таблица с именем «Costdetails».MySQL Как получить точные целочисленные значения из столбца varchar

Существует столбец, названный «стоимость», это столбец VARCHAR. это может быть что угодно, как указано ниже.

Cost ssss 
20000 - $ 
Rs - 1000/- 
10000 Rupees etc. 

Я хочу, чтобы вынуть точное количество (Ex: 1000, 20000) Из этого столбца VARCHAR. Пробовал об этом Google, и я получил запрос, а затем я попробовал этот запрос.

SELECT cost 
FROM Costdetails 
WHERE (cost REGEXP '^[0-9]' or cost REGEXP '[0-9]^' or cost REGEXP '[0-9]'); 


Output : 

Rs-1000/- 
10000 - $ 
$ 10000 

Этот запрос помогает мне получить строки, которые имеют целочисленные значения. Но хотите удалить лишний материал из колонки (Выход: Нравится 1000, Непонятно Rs-1000/-).

Любая идея, спасибо заранее.

+2

Я не думаю, что MySQL имеет регулярное выражение силы справиться с этим из коробки. Не могли бы вы сначала использовать программу, такую ​​как Notepad ++, а затем импортировать данные в MySQL? –

+1

http://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in-mysql – jarlh

+0

Я хочу создать скрипт для этого. он должен получить столбец и изменить в соответствии с требованием, и поместить данные в другие таблицы. – Aashick

ответ

0

Вы можете использовать функцию для выполнения запроса. Например: -

SET GLOBAL log_bin_trust_function_creators=1; 
DROP FUNCTION IF EXISTS digits; 
DELIMITER | 
CREATE FUNCTION digits(str CHAR(32)) RETURNS CHAR(32) 
BEGIN 
    DECLARE i, len SMALLINT DEFAULT 1; 
    DECLARE ret CHAR(32) DEFAULT ''; 
    DECLARE c CHAR(1); 

    IF str IS NULL 
    THEN 
    RETURN ""; 
    END IF; 

    SET len = CHAR_LENGTH(str); 
    REPEAT 
    BEGIN 
     SET c = MID(str, i, 1); 
     IF c BETWEEN '0' AND '9' THEN 
     SET ret=CONCAT(ret,c); 
     END IF; 
     SET i = i + 1; 
    END; 
    UNTIL i > len END REPEAT; 
    RETURN ret; 
END | 
DELIMITER ; 

SELECT digits(cost) from Costdetails; 
+0

Есть ли какой-либо возможный способ, без создания каких-либо ФУНКЦИЙ? – Aashick

+0

это потрясающе, когда вы показываете 'select digits ('junk in here 3000')' в разных крайних условиях в нижней части вашего ответа, чтобы отсортировать его. – Drew

+0

@ Удивительно, что в основном это регулярное выражение: искалеченная черепаха, решающая вашу дилемму. O (n) регулярного выражения - не совсем гепард. – Drew

0

Вы можете использовать cast функцию для этого, следующим образом: -

SELECT cast('1000/-' as UNSIGNED)

+0

Этот подход работает, только если значение начинается с числа , Например, работает для 'CAST ('100/-')'. Но не работает для 'CAST ('Rs. 1000/-')' – SarathChandra

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