2

新しい MySQL インスタンスで min_word_length を 2 に設定するか 3 に設定するかを決定しようとしています。そのため、インデックスを作成する列の 2 文字の単語の数を数えると、正しい答えがわかります。

質問は、SQL クエリを使用して、列内の数字の 2 文字の単語をカウントすることは可能ですか?

4

2 に答える 2

0

テストしていませんが、試していただけますか

SELECT SUM(
CASE WHEN yourColumn REGEXP '[[:<:]][a-zA-Z]{2}[[:>:]]'
THEN 1 
ELSE 0 END
) AS matches 
FROM ...

とは思いますが、2文字の単語が並んでいる場合にのみカウントされる可能性があり、1行に何回あるかではありません.

更新: テスト済みで、思ったように動作するので、この回答は無視してください。

于 2012-04-05T12:01:33.623 に答える
-1

LEN() 関数は、テキスト フィールドの値の長さを返します。

SELECT LEN(column_name) FROM table_name 

COUNT(*) 関数は、テーブル内のレコード数を返します。

SELECT COUNT(column_name) FROM table_name

したがって、クエリは次のようになります。

SELECT COUNT(column_name) FROM table_name
WHERE LEN(column_name)=2

アップデート:

わかりました申し訳ありませんが、私はあなたを誤解していると思います。あなたがそれを望む場合、私はあなたがやりたいことをするための機能が組み込まれていないことを恐れています。そのため、自分で関数を作成する必要があります。このようなものが動作するはずです:

            CREATE FUNCTION [dbo].[WordCount] ( @InputString VARCHAR(4000) ) 
            RETURNS INT
            AS
            BEGIN

            DECLARE @Index          INT
            DECLARE @Char           CHAR(1)
            DECLARE @PrevChar       CHAR(1)
            DECLARE @WordCount      INT
            DECLARE @CharCount      INT

            SET @Index = 1
            SET @WordCount = 0

            WHILE @Index <= LEN(@InputString)
            BEGIN
            SET @Char     = SUBSTRING(@InputString, @Index, 1)
            SET @CharCount = @CharCount + 1
            SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
                    ELSE SUBSTRING(@InputString, @Index - 1, 1)
            END


            IF @PrevChar = ' '
                SET @CharCount = 1
            END


            IF @Char = ' ' AND @CharCount < 3 AND @CharCount > 1
                SET @WordCount = @WordCount + 1

            SET @Index = @Index + 1
            END

            RETURN @WordCount

            END

今はテストしていないので、自分でテストする必要がありますが、動作するはずです。選択した文字列の 2 文字の単語がすべて返されます。3文字の単語を取得するには、変更するだけです

IF @Char = ' ' AND @CharCount < 4 AND @CharCount > 2

これが役立つことを願っています。

于 2012-04-05T11:37:29.593 に答える