1. ホーム
  2. sql

[解決済み] T-SQL デリミタに基づく文字列の分割

2022-03-04 20:52:44

質問

あるデータを、存在するかしないかわからないデリミターに基づいて分割したいのですが、どうすればいいですか?

データ例です。

John/Smith
Jane/Doe
Steve
Bob/Johnson

このデータをFirst nameとLast nameに分割するために、次のコードを使用しています。

SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName,
       SUBSTRING(myColumn, CHARINDEX('/', myColumn) + 1, 1000) AS LastName
FROM   MyTable

欲しい結果

FirstName---LastName
John--------Smith
Jane--------Doe
Steve-------NULL
Bob---------Johnson

このコードは、すべての行が予想される区切り文字を持つ限り正常に動作しますが、そうでない行がある場合はエラーになります。

"Invalid length parameter passed to the LEFT or SUBSTRING function."

これを正しく動作させるには、どのように書き直せばよいのでしょうか?

解決方法は?

このページがお役に立つかもしれません。

SELECT SUBSTRING(myColumn, 1, CASE CHARINDEX('/', myColumn)
            WHEN 0
                THEN LEN(myColumn)
            ELSE CHARINDEX('/', myColumn) - 1
            END) AS FirstName
    ,SUBSTRING(myColumn, CASE CHARINDEX('/', myColumn)
            WHEN 0
                THEN LEN(myColumn) + 1
            ELSE CHARINDEX('/', myColumn) + 1
            END, 1000) AS LastName
FROM MyTable