2016-10-25 4 views
0

просто интересно, как я могу создать функцию для подсчета числа \ п \ п (2 подряд) внутри MySQL и разделить его на Diferent псевдонимграф и раскол в MySQL

Что-то вроде:

FUNCTION 

SELECT COUNT ('paragraphs of a text_field, "\n\n"') AS PRG 
FROM database 
WHERE field_name LIKE '%text%' 

WHILE counter < PRG THEN SELECT SUBSTRING_INDEX (text_field, '\n\n', 1) 
AS C+counter END WHILE 

END FUNCTION; 

выход должен быть чем-то вроде этого

Для текста абзаца 3:

C1   |C2   |C3 
Paragraph 1 |Paragraph 2 |Paragraph 3 

Для 5 текст абзаца:

C1   |C2   |C3   |C4   |C5 
Paragraph 1 |Paragraph 2 |Paragraph 3 |Paragraph 4 |Paragraph 5 
+0

Я думаю, вы имеете в виду 'пункт 4 и пункт 5'? –

ответ

0

MariaDB (а также MySQL) не поддерживает разделение и стержень - это точно быстрее, если вы делаете расчеты в приложении.

Чистое решение MariaDB/MySQL будет хранимая процедура, как

CREATE PROCEDURE xyz() 
BEGIN 
    SELECT CHAR_LENGTH(field_name) - CHAR_LENGTH(REPLACE(field_name,"\n\n","")) INTO @a FROM mytbl WHERE fieldname='yourvalue'; 
    SET @i=1; 
    SET @query="SELECT "; 
    REPEAT 
    SET @query= CONCAT(@query, ' REPLACE(substring_index(field_name, "\n\n", ',@i,'), SUBSTRING_INDEX(field_name,"\n\n", ',@i-1,'), "") AS C',@i,''); 
    IF @i < @a THEN 
     SET @query=CONCAT(@query, ","); 
    END IF; 
    SET @[email protected]+1; 
    UNTIL @i > @a END REPEAT; 
    SET @query=CONCAT(@query, " FROM mytbl WHERE field_name='yourvalue'"); 
    PREPARE my FROM @query; 
    EXECUTE my; 
END 
+0

Perl: '@paras = split (" \ n \ n ", $ str);' намного меньше работает. PHP также является 1-лайнером. –

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