16

MySQL クエリで、Regex.Replace 関数 (たとえば .NET/C#) と同じ動作をさせるにはどうすればよいですか?

多くの人と同じように、フィールド内の単語数を数えたいので、それが必要です。ただし、次の回答には満足していません (そのサイトで何度か与えられています)。

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

2 つの単語の間に 1 つ以上のスペースがあると、良い結果が得られないためです。

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

4

4 に答える 4

17

MySQL ユーザー定義関数として利用可能な REGEXP_REPLACE があります。

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

于 2009-11-18T12:24:29.843 に答える
0

答えはノーです。MySQL で同じ動作を行うことはできません。

ただし、この機能の一部を有効にすると思われる UDF にリンクしている件名に関するこの以前の質問をチェックアウトすることをお勧めします。

于 2009-11-18T12:28:10.213 に答える
0

MySQL 8.0 は適切なREGEXP_REPLACE関数を提供するようになりました。これにより、これがより簡単になります。

SQL

SELECT -- Count the number of gaps between words
       CHAR_LENGTH(txt) -
           CHAR_LENGTH(REGEXP_REPLACE(
               txt,
               '[[:space:]]([[:space:]]*)', -- A chunk of one or more whitespace characters
               '$1')) -- Discard the first whitespace character and retain the rest
           + 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;

デモ

DB-Fiddle オンライン デモ

于 2018-07-13T09:11:50.123 に答える