2014-02-05 3 views
0

У меня есть текстовый столбец geotargeting, содержащий коды страны, разделенные запятой ("US, DE, CA, GB, IT"). Если у меня есть эта строка ввода «DE, CA, FR», я хочу найти все строки, содержащие одну из данных стран.Поиск в текстовом столбце

Что-то вроде FIND_IN_SET (str, strlist), но у меня есть 2 строковых списка.

Спасибо.

+0

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

ответ

1

Я думаю, что только вы должны использовать хранимую процедуру. Проверить это не запустили этот код, но он может помочь вам

SET @myArrayOfValue = 'US,DE,CA,GB,IT'; 
SET @myArrayOfValue1 = 'DE,CA,FR'; 

WHILE (LOCATE(',', @myArrayOfValue) > 0) 
DO 
    SET @value = ELT(1, @myArrayOfValue); 
    SET @value = SUBSTRING(@myArrayOfValue, LOCATE(',',@myArrayOfValue) + 1); 

    WHILE (LOCATE(',', @myArrayOfValue1) > 0) 
    DO 
     SET @value1 = ELT(1, @myArrayOfValue1); 
     SET @value1 = SUBSTRING(@myArrayOfValue1 , LOCATE(',',@myArrayOfValue1) + 1); 
    END WHILE; 

    IF(value = @value1) THEN  
     // the value match.. do something here, may be insert it in a temporary table 
    END IF; 
END WHILE; 
+0

Спасибо, я пишу функцию, которая работает. –

+0

Отлично. Если это помогло вам, не забудьте отметить это как ответ. –

0
DELIMITER $$ 

CREATE 
    FUNCTION find_set_in_set (set_1 TEXT, set_2 TEXT) 
    RETURNS BOOLEAN DETERMINISTIC 

    BEGIN 
     SET @i1 = LENGTH(set_1) - LENGTH(REPLACE(set_1, ',', '')) + 1; 

     WHILE (@i1 > 0) DO 
      SET @substr1 = SUBSTRING_INDEX(SUBSTRING_INDEX(set_1, ',', @i1), ',', -1); 
      SET @i1 = @i1 - 1; 
      SET @i2 = LENGTH(set_2) - LENGTH(REPLACE(set_2, ',', '')) + 1; 

      WHILE (@i2 > 0) DO 
       SET @substr2 = SUBSTRING_INDEX(SUBSTRING_INDEX(set_2, ',', @i2), ',', -1); 
       SET @i2 = @i2 - 1; 

       IF(@substr1 = @substr2) THEN 
        RETURN TRUE; 
       END IF; 
      END WHILE; 
     END WHILE; 

     RETURN FALSE; 
    END 
$$ 
Смежные вопросы