본문 바로가기
MySql

MySQL SQL 구문의 mysql 카운트 단어

by 베이스 공부 2021. 1. 31.
반응형

간단한 쿼리를 보겠습니다.

SELECT myfield
FROM   mytable
WHERE  criteria

예를 들어 위의 쿼리는 10 행의 결과를 제공합니다. myField 필드는 텍스트 필드입니다.

내 질문은 이것이다 : 위의 쿼리를 변경하고 myField 필드의 총 단어 수를 가져올 수 있습니까?

수정 됨 : 총 단어 수란 모든 행에서 쿼리에서 선택한 모든 필드의 총 단어 수를 의미합니다.

+------------------------------+-------+
| sentence                     | Words |
+------------------------------+-------+
| Hello World                  |     2 |
| Hello World                  |     2 |
| Mary had a little lamb       |     5 |
| Her fleece was white as snow |     6 |
| Everywhere that mary went    |     4 |
| Umm, sheep followed her      |     4 |
+------------------------------+-------+

 

해결 방법

 


mysql> select * from test;
+----+------------------------------+
| id | sentence                     |
+----+------------------------------+
|  0 | Hello World                  |
|  1 | Hello World                  |
|  2 | Mary had a little lamb       |
|  3 | Her fleece was white as snow |
|  4 | Everywhere that mary went    |
|  5 | Umm, sheep followed her      |
+----+------------------------------+
6 rows in set (0.00 sec)

mysql> SELECT sentence, wordcount(sentence) as "Words" from test;
+------------------------------+-------+
| sentence                     | Words |
+------------------------------+-------+
| Hello World                  |     2 |
| Hello World                  |     2 |
| Mary had a little lamb       |     5 |
| Her fleece was white as snow |     6 |
| Everywhere that mary went    |     4 |
| Umm, sheep followed her      |     4 |
+------------------------------+-------+
6 rows in set (0.02 sec)

함수가 작동하도록하려면 MySQL에서 함수 선언을 실행해야합니다. 다른 쿼리를 실행하는 것과 같습니다.

mysql> DELIMITER $$
mysql> CREATE FUNCTION wordcount(str TEXT)
            RETURNS INT
            DETERMINISTIC
            SQL SECURITY INVOKER
            NO SQL
       BEGIN
         DECLARE wordCnt, idx, maxIdx INT DEFAULT 0;
         DECLARE currChar, prevChar BOOL DEFAULT 0;
         SET maxIdx=char_length(str);
         WHILE idx < maxIdx DO
             SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]';
             IF NOT prevChar AND currChar THEN
                 SET wordCnt=wordCnt+1;
             END IF;
             SET prevChar=currChar;
             SET idx=idx+1;
         END WHILE;
         RETURN wordCnt;
       END
     $$
Query OK, 0 rows affected (0.10 sec)

mysql> DELIMITER ;

 

참조 페이지 https://stackoverflow.com/questions/12156970

 

 

반응형

댓글