ホームページ > データベース > mysql チュートリアル > T-SQL で文字列を分割するときに欠落している区切り文字を処理するにはどうすればよいですか?

T-SQL で文字列を分割するときに欠落している区切り文字を処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-08 09:47:42
オリジナル
172 人が閲覧しました

How to Handle Missing Delimiters When Splitting Strings in T-SQL?

T-SQL 文字列の分割: 欠落している区切り文字に対処する

一貫性のない区切り文字を含むデータには、区切り文字の欠落シナリオを確実に処理する必要があります。 よくある問題を調べてみましょう:

FirstName/LastName 形式で名前を格納する「Name」列を持つテーブル (「MyTable」) を想像してください。 ただし、一部のエントリには「/」区切り文字が含まれていない可能性があります:

<code>FirstName---LastName
John--------Smith
Jane--------Doe
Steve-------NULL  -- Missing delimiter
Bob---------Johnson</code>
ログイン後にコピー

次のような単純な SUBSTRINGCHARINDEX のアプローチは、区切り文字が存在しない場合には失敗します。

<code class="language-sql">SELECT 
    SUBSTRING(Name, 1, CHARINDEX('/', Name)-1) AS FirstName,
    SUBSTRING(Name, CHARINDEX('/', Name) + 1, 1000) AS LastName
FROM MyTable;</code>
ログイン後にコピー

「LEFT 関数または SUBSTRING 関数に渡された長さのパラメーターが無効です」というエラーは、区切り文字が見つからない場合に CHARINDEX が 0 を返し、部分文字列の長さが負になるために発生します。

解決策: 条件付き部分文字列抽出

この解決策には、部分文字列の長さを条件付きで決定する CASE ステートメントが含まれます。

<code class="language-sql">SELECT 
    SUBSTRING(Name, 1, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) ELSE CHARINDEX('/', Name) - 1 END) AS FirstName,
    SUBSTRING(Name, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) + 1 ELSE CHARINDEX('/', Name) + 1 END, 1000) AS LastName
FROM MyTable;</code>
ログイン後にコピー

この洗練されたクエリは、CASE を使用して両方のシナリオを処理します。

  • 区切り文字がありません (CHARINDEX('/') = 0): FirstName の部分文字列の長さが文字列全体の長さ (LEN(Name)) になり、LastName 部分文字列は末尾の 1 文字後の位置から始まります文字列 (LEN(Name) 1) の値を返し、事実上 NULL.
  • を返します。
  • 区切り文字の存在: 元の SUBSTRING ロジックが適用されます。

この堅牢なアプローチにより、区切り文字の有無に関係なく正しい結果が保証され、「無効な長さパラメーター」エラーが防止されます。

以上がT-SQL で文字列を分割するときに欠落している区切り文字を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート