2012-05-02 9 views
0

最後の文字を削除するのに部分文字列を使用していますが、何が間違っているかわかりませんが、長い文字列を入力すると最後の文字は削除されません。以下 はレン(@XXXが)、それは最後の文字を削除しますが、入力の長さが98015それです小さいとき、私は SUBSTRING(@ XXX、0、(LEN(@XXX)-1))SQLサーバーのサブストリングが長い文字列に対して適切に処理されていません

を使用していますものです削除していません。制限はありますか?ここで何が間違っていますか?

+0

検索文字列はどのように宣言していますか? 2バイト文字セットのデータで作業しているのではないかと思います。 –

+0

どのデータベースを使用していますか? SQL Server Management Studioを使用していて、そこに返された文字列を調べている場合、最大値は約43 KBです。最後の文字が置換されているかどうかはわかりません。 –

答えて

0

私はちょうどそれをテストしたので、問題はあなたが結果を調べる方法であると思うと思うようになりました。 これは、クエリアナライザ(MS SQLを使用していることを前提としています)ではうまくいきます。以下のスクリプトは100,000文字分の文字列を生成し、最後の文字が何であるかを確認します。

declare @longstring varchar(max) 
declare @lastchar varchar(1) 
declare @i int 

set @longstring = '' 
set @lastchar = '' 
set @i = 1 
while @i <= 100000 
begin 
    set @longstring = @longstring + '-' 
    set @i = @i + 1 
end 
set @longstring = @longstring + '0' 
print 'Original long string: ' + @longstring 
set @lastchar = SUBSTRING(@longstring, LEN(@longstring), 1) 
print 'Last character before substring: ' + @lastchar 
--Last character before substring: 0 
set @longstring = SUBSTRING(@longstring, 0, len(@longstring) - 1) 
set @lastchar = SUBSTRING(@longstring, LEN(@longstring), 1) 
print 'Long string after substring: ' + @longstring 
print 'Last character after substring: ' + @lastchar 
--Last character after substring: - 
+0

コードをありがとう。これは私がどこに間違っていたかを理解するのに役立ちました。問題は、最後のキャラクターがトリミングされていないと思ったすべての出力を表示しているので、マネージメントスタジオの出力です。 – 09999

+0

クエリアナライザの動作に関する長いスレッドがあります:http://stackoverflow.com/questions/952247/sql-server-truncation-and-8192-limitation興味があれば。いずれにしても、長い文字列を使用すると、おそらくQAから離れる必要があります – itayw

関連する問題