2013-10-03 3 views
0

В запросе я сравниваю номера мобильных телефонов с другим (мобильным) значением в другом столбце.MySQL - Замените пробелы из столбца в запросе

До сих пор я делаю это что-то вроде ...WHERE `table_one`.`mobile` != `table_two`.`mobile

Проблемы есть одинаковые мобильные номера, но отделены друг от различных пространств в каждом столбце, т.е. 07711 123 456 и 07711 123456 поэтому возвращающие результатов, когда есть совпадение.

Я знаю, как это сделать во время обновления, что-то вроде update `table` set number = REPLACE(number, ' ', '');, но я не вижу примеров, где это делается в середине запроса. Возможно, делая проверку, помещая в переменную MySQL, делая то же самое с другим мобильным телефоном в дополнительном столбце, а затем сравнивая две переменные?

+1

Почему вы не сравниваете все пробелы перед сравнением? –

ответ

1

Вы можете использовать REPLACE в запросе на выборку также:

select REPLACE('07711 123 456', ' ', ''); 
+------------------------------------+ 
| REPLACE('07711 123 456', ' ', '') | 
+------------------------------------+ 
| 07711123456      | 
+------------------------------------+ 
1 row in set (0.06 sec) 
0

@Nadeem_MK, спасибо за это. Мне удалось написать необходимый мне запрос без особых усилий.

...WHERE (REPLACE(`tbl_one`.`mobile`, ' ', '')) != (REPLACE(`tbl_two`.`mobile`, ' ', ''))

Я попробовать функцию TRIM, но я мог только управлять, чтобы очистить начальные или конечные пробелы и два операторов выбора запроса было больше, чем когда я использовал функцию REPLACE.

0

Вы можете создать функцию, которая использует regexp только для номеров. Таким образом, он будет удалять + -() или любые возможные символы, которые не является целым числом

DELIMITER $$ 

CREATE FUNCTION `fn_ShowOnlyNumbers`(str VARCHAR(1000)) RETURNS varchar(1000) CHARSET latin1 
BEGIN 
    DECLARE counter INT DEFAULT 0; 
    DECLARE strLength INT DEFAULT 0; 
    DECLARE strChar VARCHAR(1000) DEFAULT '' ; 
    DECLARE retVal VARCHAR(1000) DEFAULT ''; 

    SET strLength = LENGTH(str); 

    WHILE strLength > 0 DO 
    SET counter = counter+1; 
    SET strChar = SUBSTRING(str,counter,1); 
    IF strChar REGEXP('[0-9]') = 1 
     THEN SET retVal = CONCAT(retVal,strChar); 
    END IF; 
    SET strLength = strLength -1; 
    SET strChar = NULL; 
    END WHILE; 
RETURN retVal; 
END 

Тогда вы можете просто использовать функцию в ИНЕКЕ.

...WHERE `table_one`.fn_ShowOnlyNumbers(mobile) != `table_two`.fn_ShowOnlyNumbers(mobile) 
Смежные вопросы