新しい MySQL インスタンスで min_word_length を 2 に設定するか 3 に設定するかを決定しようとしています。そのため、インデックスを作成する列の 2 文字の単語の数を数えると、正しい答えがわかります。
質問は、SQL クエリを使用して、列内の数字の 2 文字の単語をカウントすることは可能ですか?
新しい MySQL インスタンスで min_word_length を 2 に設定するか 3 に設定するかを決定しようとしています。そのため、インデックスを作成する列の 2 文字の単語の数を数えると、正しい答えがわかります。
質問は、SQL クエリを使用して、列内の数字の 2 文字の単語をカウントすることは可能ですか?
テストしていませんが、試していただけますか
SELECT SUM(
CASE WHEN yourColumn REGEXP '[[:<:]][a-zA-Z]{2}[[:>:]]'
THEN 1
ELSE 0 END
) AS matches
FROM ...
とは思いますが、2文字の単語が並んでいる場合にのみカウントされる可能性があり、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
これが役立つことを願っています。