質問:
SQL で、SUBSTRING を使用して区切り文字に基づいて文字列を分割すると、区切り文字が存在しない場合にエラーが発生することがあります。以下のコードはこれを示しています:
<code class="language-sql">SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName, SUBSTRING(myColumn, CHARINDEX('/', myColumn) + 1, 1000) AS LastName FROM MyTable</code>
区切り文字のない行が見つかると、「LEFT 関数または SUBSTRING 関数に渡された長さの引数が無効です。」というエラーがスローされます。
解決策:
この問題を解決するには、次のように SUBSTRING 関数で CASE ステートメントを使用します。
<code class="language-sql">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</code>
この更新されたコードは、CHARINDEX を使用して区切り文字の位置を評価します。区切り文字が見つからない場合 (CHARINDEX が 0 を返す)、CASE ステートメントは文字列の長さを使用して、文字列全体が名前として扱われるようにします。区切り文字が存在する場合、区切り文字の後の最初の文字の位置が姓の開始インデックスとして計算されます。
以上が区切り文字を使用して T-SQL で文字列を安全に分割する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。