問題:
SQLServerで文字列を分割したい。
例1:
文があり、それをスペース文字で分割したい。
ソリューション1:
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
結果は次のようになります:
value |
---|
An |
例 |
文。 |
ディスカッション:
SQL ServerのSTRING_SPLIT(string、separator)関数は、最初の引数の文字列を2番目の引数の区切り文字で分割します。文を単語に分割するには、その文をSTRING_SPLIT()
の最初の引数として指定します 関数と2番目の引数としての''。
STRING_SPLIT()
valueという名前の列になります。文字列の各部分を別々の行に取得するには、STRING_SPLIT(string, separator)
から値を選択します 。たとえば、
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
もちろん、カンマなどの他の区切り文字を使用して文字列を分割することもできます。他の列と同じように、列の名前を変更することもできます。
例2:
texts
表、いくつかの文があります。
文 |
---|
これは最初の文です。 |
そしてこれがもう1つです。 |
文をスペース文字で分割したい。
ソリューション2:
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
結果は次のようになります:
value |
---|
これ |
は |
the |
最初 |
文。 |
そして |
こちら |
the |
その他 |
1つ。 |
ディスカッション:
前の例と同様に、STRING_SPLIT(text、separator)関数は、最初の引数として指定された文字列を区切り文字で分割します。今回は、世話をするためのいくつかの文があります。これらの文はtexts
に保存されます テーブル。これが、CROSSAPPLYを使用する必要がある理由です。具体的には
texts CROSS APPLY STRING_SPLIT(sentence, ' ')
FROM
で使用してください 句。これは、右側(STRING_SPLIT(sentence, ' ')
)は左側のテーブルの各行に適用されます(texts
)。これが、右側が左側のテーブルの列(ここでは、texts
表。)取得するクエリは次のとおりです。
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
例3:
texts
テーブルには、2つの列があります:id
およびsentence
。
id | 文 |
---|---|
1 | これは最初の文です。 |
2 | そしてこれがもう1つです。 |
文をスペース文字で分割し、文のIDも表示したい。
ソリューション3:
SELECT id, value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
結果は次のようになります:
id | 値 |
---|---|
1 | これ |
1 | は |
1 | |
1 | 最初 |
1 | 文。 |
2 | そして |
2 | こちら |
2 | |
2 | その他 |
2 | 1つ。 |
ディスカッション:
この例は非常に似ていますが、id
も確認する必要があります 桁。この列を表示するには、SELECT
に追加するだけです。 リストし、コンマを含めることを忘れないでください。結果には、文のIDと文の部分が表示されます。たとえば、最初の文は5つの部分に分割され、IDは1
です。 。したがって、結果テーブルの5つの部分すべてのIDは1
になります。 。 ID 2
の次の文 、も5つの部分に分割され、これらの各部分はid = 2
で表示されます。 。