2017-01-31 5 views
1

文字列内の単語を数えること私はできません簡単なやり方を見つけるようです。 SQL文字列(文)内の「単語」の数を数えればいいだけです。私の例では、なぜ「単語」が引用符で囲まれているのかを見ることができます。 「単語」は空白で区切られています。SQL文字列:私はここの質問の多くを通じて検索が、私はまともな答えを見つけ、すべてが <p></p>は、私はSQLで簡単なタスクを持っているなどのJavascriptのような異なった言語のためである

サンプル文章:

1. I am not your father. 
2. Where are your brother,sister,mother? 
3. Where are your brother, sister and mother? 
4. Who are  you? 

理想の答え:あなたが見ることができるように、私は「言葉」のシンボルを(私はの一部として扱うために持って無視をカウントする必要が

1. 5 
2. 4 
3. 7 
4. 3 

ワード)。だからサンプル番号で。 2:私はこれを行うために使用することができますどのようなSQL機能
REPLACE(string, ' ', ' ') -> 2 whitespaces to 1 REPLACE(string, ' ', ' ') -> 3 whitespaces to 1 and so on..

(1)Where (2)are (3)your (4)brother,sister,mother? = 4

私はこのような置き換えを行うことによって、複数の空白を扱うことができますか?私はSQL Server 2012を使用しますが、SQL Server 2008でも機能する関数が必要です。ここで

+0

これは私に尋ねると毛深い問題です。たとえば、単語の1つとして「3,000」という数字が表示されたとします。そして、この場合、コンマで分割することは正しくありません。あなたは、ここに何があるのか​​を明確に伝えるべきです。 –

+0

@TimBiegeleisenカンマまたはその他の特殊文字は、「単語」の一部として扱われます。それは私の質問で述べられている。単一の空白が唯一有効な区切り文字です。 –

+1

SQLで行う必要がありますか? :| – Laazo

答えて

5

はそれを行うための一つの方法である:

サンプルテーブルを作成し、移入(ください保存があなたの将来の質問では、この段階で)

DECLARE @T AS TABLE 
(
    id int identity(1,1), 
    string varchar(100) 
) 

INSERT INTO @T VALUES 
('I am not your father.'), 
('Where are your brother,sister,mother?'), 
('Where are your brother, sister and mother?'), 
('Who are  you?') 

に複数のスペースを置き換えるために、CTEを使用します単一のスペース(Gordon Linoffさんのおかげで答えhere

;WITH CTE AS 
(
SELECT Id, 
     REPLACE(REPLACE(REPLACE(string, ' ', '><' -- Note that there are 2 spaces here 
           ), '<>', '' 
         ), '><', ' ' 
       ) as string 
FROM @T 
) 

クエリCTE - STの長さリング - スペースなしの文字列の長さ+ 1:

SELECT id, LEN(string) - LEN(REPLACE(string, ' ', '')) + 1 as CountWords 
FROM CTE 

結果:

id CountWords 
1 5 
2 4 
3 7 
4 3 
+0

これは私が探しているものです。うまくやって、シンプル。 + 1が正しく動作するために必要な理由を聞いてもよろしいですか? –

+1

[文字列の長さ] - [区切り文字のない文字列の長さ]は区切り文字の数を返します。値の数を取得するには、値を追加する必要があります。 –

+0

私は参照してください。理解しています。優れた答えをありがとう。 –

1

これは、@ ZoharPeledの答えのマイナーな改良です。これは0の長さの値を扱うこともできます:

DECLARE @t AS TABLE(id int identity(1,1), string varchar(100)) 

INSERT INTO @t VALUES 
    ('I am not your father.'), 
    ('Where are your brother,sister,mother?'), 
    ('Where are your brother, sister and mother?'), 
    ('Who are  you?'), 
    ('') 

;WITH CTE AS 
(
    SELECT 
    Id, 
    REPLACE(REPLACE(string,' ', '><'), '<>', '') string 
    FROM @t 
) 
SELECT 
    id, 
    LEN(' '+string)-LEN(REPLACE(string, '><', ' ')) CountWords 
FROM CTE 
関連する問題