SQL Serverで区切り文字で文字列を分割するにはどうすればよいですか?



問題を排除するために楽器を試してください

この記事では、区切られた文字列値を分割するいくつかの方法について説明します。これは、を含む複数の方法を使用して実現できます。



  • STRING_SPLIT関数を使用して文字列を分割する
  • 文字列を分割するためのユーザー定義のテーブル値関数を作成し、
  • XQueryを使用して文字列値を分割し、区切られた文字列をXMLに変換します

まず、テーブルを作成し、3つの方法すべてで使用されるデータをテーブルに挿入する必要があります。テーブルには、フィールドIDと区切り文字を含む文字列を含む単一の行が含まれている必要があります。次のコードを使用して、「student」という名前のテーブルを作成します。



CREATE TABLE学生(ID INT IDENTITY(1、1)、student_name VARCHAR(MAX))

次のコードを実行して、カンマで区切った学生名を1行に挿入します。



INSERT INTO student(student_name)VALUES( 'Monroy、Montanez、Marolahakis、Negley、Albright、Garofolo、Pereira、Johnson、Wagner、Conrad')

テーブルの作成とデータの挿入

次のコードを使用して、データがテーブルに挿入されているかどうかを確認します。

学生から*を選択

データが「学生」テーブルに挿入されているかどうかを確認します



方法1:STRING_SPLIT関数を使用して文字列を分割する

SQL Server 2016では、 「STRING_SPLIT」 互換性レベル130以上で使用できる機能が導入されました。 2016 SQL Serverバージョン以降を使用している場合は、この組み込み関数を使用できます。

さらに 「STRING_SPLIT」 サブ文字列が区切られた文字列を入力し、区切り文字または区切り文字として使用する1文字を入力します。この関数は、行にサブ文字列が含まれる単一列のテーブルを出力します。出力列の名前は「 値' 。この関数は2つのパラメーターを取得します。最初のパラメータは文字列で、2番目のパラメータは文字列を分割するための区切り文字または区切り文字です。出力には、部分文字列が存在する単一列のテーブルが含まれます。この出力列の名前は '値' 下の図でわかるように。また、 「ストリングスプリット」 table_valued関数は、入力文字列がNULLの場合、空のテーブルを返します。

データベースの互換性レベル:

データベースです接続済み互換性レベル。それ有効にするインクルードデータベースの動作あります互換性がありますです特にSQLサーババージョンそれ実行しますオン。

次に、「string_split」関数を呼び出して、コンマで区切られた文字列を分割します。しかし、互換性レベルは130未満であったため、次のエラーが発生しました。 「無効なオブジェクト名「SPLIT_STRING」」

データベースの互換性レベルが130「無効なオブジェクト名split_string」より低い場合、エラーが発生します

したがって、データベースの互換性レベルを130以上に設定する必要があります。したがって、これらの手順に従って、データベースの互換性レベルを設定します。

  • まず、次のコードを使用して、データベースを「single_user_access_mode」に設定します。
ALTER DATABASE SET SINGLE_USER
  • 次に、次のコードを使用してデータベースの互換性レベルを変更します。
ALTER DATABASE SET COMPATIBILITY_LEVEL = 130
  • 次のコードを使用して、データベースをマルチユーザーアクセスモードに戻します。
ALTER DATABASE SET MULTI_USER
USE [master] GO ALTER DATABASE [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centrality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO

出力は次のようになります。

互換性レベルを130に変更します

次に、このコードを実行して、必要な結果を取得します。

DECLARE @string_value VARCHAR(MAX); SET @ string_value = 'Monroy、Montanez、Marolahakis、Negley、Albright、Garofolo、Pereira、Johnson、Wagner、Conrad' SELECT * FROM STRING_SPLIT(@string_value、