sql >> データベース >  >> RDS >> Mysql

SQL構文のmysqlカウントワード

    この質問 クエリ内の@otisによる:

    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 ;
    



    1. 含まれている SQL スクリプトの実行が失敗したときにパペットのビルドを失敗させる

    2. EclipseLinkがスカラーブール値のフェッチに失敗する

    3. Oracle-ORA-01489:文字列連結の結果が長すぎます

    4. 制約の列名を返す関数を作成するにはどうすればよいですか?