2009-11-18 20 views
16

MySQLのクエリで、Regex.Replace関数(.NET/C#など)と同じ動作をするにはどうすればよいですか?MySQL /正規表現の置換えの単語を数えるには?

多くの人と同じように、フィールドの単語数を数えたいので、それが必要です。二つの単語の間つ以上のスペースがある場合、それが良い結果が得られていないので

SELECT LENGTH(name) - LENGTH(REPLACE(name, ' ', '') +1 FROM table 

:しかし、私は次のような答え(そのサイトに数回与えられる)に満足していませんよ。

ところで、私はRegex.Replace関数が面白いかもしれないと思うので、良いアイデアは大歓迎です!

+0

、なぜフィールド内の単語を数えますか? – Peter

答えて

17

REGEXP_REPLACEはMySQL user-defined functionsとして利用できます。

ワードカウント:データベースに入るデータを制御できる場合は、挿入する前に2つの空白を削除できます。また、単語数に頻繁にアクセスする必要がある場合は、コードで一度計算してデータベースに格納することもできます。

+0

遅く受け入れて申し訳ありません... – PierrOz

0

答えは、あなたはMySQLで同じ動作をすることはできません。

しかし、私はこの前にquestionをチェックアウトすることをお勧めします。これは、この機能の一部を有効にすると思われるUDFにリンクしています。

1

ほとんどの場合、this questionと重複していますが、この回答は、カスタム正規表現代替語のアドバンスドバージョンthis blog postに基づいて単語を数える使用例を扱います。私が試したすべてのオンラインワードカウンタ(例えばhttps://wordcounter.net/)と同じ -

サンプルテキストについては

Rextester online demo

デモは、これは61のカウントを提供します。

SQL (簡潔にするために機能コードを除く):好奇心のうち

SELECT txt, 
     -- Count the number of gaps between words 
     CHAR_LENGTH(txt) - 
     CHAR_LENGTH(reg_replace(txt, 
           '[[:space:]]+', -- Look for a chunk of whitespace 
           '^.', -- Replace the first character from the chunk 
           '', -- Replace with nothing (i.e. remove the character) 
           TRUE, -- Greedy matching 
           1, -- Minimum match length 
           0, -- No maximum match length 
           1, -- Minimum sub-match length 
           0 -- No maximum sub-match length 
           )) 
     + 1 -- The word count is 1 more than the number of gaps between words 
     - IF (txt REGEXP '^[[:space:]]', 1, 0) -- Exclude whitespace at the start from count 
     - IF (txt REGEXP '[[:space:]]$', 1, 0) -- Exclude whitespace at the end from count 
     AS `word count` 
FROM tbl; 
関連する問題