0

更新 - 2 番目のフィールドを見てみましょう。問題なく結果が得られます...まだ最初のエラーが表示されます..最初のフィールドを把握する必要があります.最初のフィールドを削除する必要があると思います..

これは機能します.. 2番目の長さ

SELECT  SUBSTRING(AFIELD,
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1),
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)+1) - CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)) as [second_length]
FROM SOMETABLE with (nolock)

また機能する 3 番目の長さ..

SELECT SUBSTRING(AFIELD,
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1),
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)+1)-CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)) as [THIRD_length]
FROM SOMETABLE with (nolock)

これはまだ機能していません..うーん..

SELECT SUBSTRING(AFIELD,
CHARINDEX(CHAR(10), AFIELD),
CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)-CHARINDEX(CHAR(10), AFIELD)) as [FIRST_length]
FROM SOMETABLE with (nolock)

古い情報..これは正常に動作します..

SELECT CHARINDEX(CHAR(10), AFIELD)[first]
,CHARINDEX(CHAR(10), AFIELD,CHARINDEX(CHAR(10), AFIELD)+1)[second]
FROM SOMETABLE

しかし、2つを減算しようとすると、結果は空です..

こことhttp://phelabaum.com/archive/tag/charindex/に投稿された情報に従いました。

SELECT  SUBSTRING(AFIELD,
CHARINDEX(CHAR(10),AFIELD)+1,
CHARINDEX(CHAR(10),AFIELD,CHARINDEX(CHAR(10),AFIELD)+1) - CHARINDEX(CHAR(10),AFIELD)) as [first_length]
FROM SOMETABLE

これを実行すると、次のメッセージが表示されます。

メッセージ 537、レベル 16、状態 3、行 1 無効な長さパラメーターが LEFT または SUBSTRING 関数に渡されました。

フィールドは CHAR(10) または改行で区切られています。

4

1 に答える 1

1

テストしているテキストに実際に 2 があり、その間にテキストがある場合は正常に機能CHAR(10)します。少なくとも 1 つ不足している場合、そのエラーが発生します。

CHARINDEXchar が見つからない場合、それ自体ではエラーは返されないことに注意してください。単純に 0 が返されます。これが、最初のクエリが実行される理由です。

于 2013-09-20T01:12:17.560 に答える