2

簡単な質問@lenです。以下のクエリで変数の値を出力すると、値が 12 (指定された文字列の文字数) ではなく 1 になるのはなぜですか?

DECLARE @string varchar
DECLARE @index int
DECLARE @len int
DECLARE @char char(1)
SET @string = 'content loop'
SET @index = 1
SET @len= LEN(@string)

print @len
4

3 に答える 3

8

あなたの宣言@stringは間違っています。に長さがありませんvarchar

これを試して:

declare @string varchar(255);   -- or whatever

この状況でのデフォルトは 1 であることを学習しました。

これはドキュメントで明確に指定されています。さらに注意すると、MS SQL はこれをかなり複雑にしているようです。

データ定義または変数宣言ステートメントで n が指定されていない場合、デフォルトの長さは 1 です。CAST 関数および CONVERT 関数を使用するときに n が指定されていない場合、デフォルトの長さは 30 です。

varcharまたはを使用するときは常に長さを含めるのが正しい習慣ですnvarchar

于 2013-05-28T23:17:44.767 に答える
2

変数 @string に実際の長さを与える必要があります。変数 @string を出力すると、おそらく 'C' が返されます。

于 2013-05-28T23:18:42.993 に答える