2014-09-22 2 views
-1

Мне нужно написать процедуру, которая будет работать с той же командой, но вам нужно будет изменить поле LIKE. Он начнется с «aa%», затем перейдите к «ab%» до «az%». то он начнет с «ba%», «bb%» и т. д. до «zz%». Я попытался запустить его в цикле, но не знаю, откуда взять письма.написать процедуру для прохождения всех букв

SELECT t1.colA, t2.colA, count(*) 
FROM (SELECT colA FROM table WHERE colA LIKE "a[a-z]%") t1 
JOIN table t2 
ON t1.date = t2.date 
GROUP BY t1.colA, t2.colA 
HAVING count(*) > 10 
INSERT INTO /tmp/[a[a-z]].csv 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 

После 26 итераций, что следующий будет

SELECT t1.colA, t2.colA, count(*) 
    FROM (SELECT colA FROM table WHERE colA LIKE "b[a-z]%") t1 
    JOIN table t2 
    ON t1.date = t2.date 
    GROUP BY t1.colA, t2.colA 
    HAVING count(*) > 10 
    INSERT INTO /tmp/[b[a-z]].csv 
    FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' 

Следующая будет

SELECT t1.colA, t2.colA, count(*) 
FROM (SELECT colA FROM table WHERE colA LIKE "c[a-z]%") t1 
JOIN table t2 
ON t1.date = t2.date 
GROUP BY t1.colA, t2.colA 
HAVING count(*) > 10 
INSERT INTO /tmp/[c[a-z]].csv 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 

и так далее, пока

SELECT t1.colA, t2.colA, count(*) 
FROM (SELECT colA FROM table WHERE colA LIKE "z[a-z]%") t1 
JOIN table t2 
ON t1.date = t2.date 
GROUP BY t1.colA, t2.colA 
HAVING count(*) > 10 
INSERT INTO /tmp/[z[a-z]].csv 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
+0

почему нет ', как "[A-Z] [A-Z]%"'? и 'GROUP BY left (ColA, 1), справа (слева (ColA, 2), 1)' – Horaciux

+0

Я не уверен, что вы имеете в виду именно? – user2924127

+0

добавьте образец данных и желаемый результат, и я покажу вам. – Horaciux

ответ

1

Один из вариантов не использовать ПОВТОРЕНИЕ. Значения кода ASCII для символов 'a' thru 'z' составляют от 97 до 122, мы можем использовать функцию CHAR() для возврата символа для заданного значения кода ASCII.

Например:

BEGIN 
    DECLARE c VARCHAR(1); 
    DECLARE i INT; 
    SET i = 97; 
    REPEAT 
     SET c = CHAR(i); 

     -- SELECT c; 

     SET i = i + 1; 
    UNTIL i > 122 END REPEAT; 
END 
Смежные вопросы