0

テーブルCLIENTDETに「CLIENTDATA」という列があり、「last-ST」-「Tranactions」-「ChallanDetails」-「Int」のようなデータがあります。計算 -インタレストレポート-N'。

ケース1:

クエリを書くとき

SELECT CLIENTDATA,
       LEN(CLIENTDATA)
FROM   CLIENTDET  

この場合、正しいデータと長さを「75」として取得しています。

ケース2:

クエリを書くとき

SELECT CAST(
           CASE 
                WHEN CLIENTDATA IS NULL THEN ''
                ELSE CLIENTDATA
           END AS 
           VARCHAR
       ),
       LEN(
           CAST(
               CASE 
                    WHEN CLIENTDATA IS NULL THEN ''
                    ELSE CLIENTDATA
               END 
               AS VARCHAR
           )
       )
FROM CLIENTDET

In this case i am not getting correct data as in Case 1, here length is '30'.

ここに欠けているものや理解できないものはありますか?....画像が添付されています

ここに画像の説明を入力してください

4

1 に答える 1

3

長さを指定せずにリテラルを文字型にキャストすると、
デフォルトで 30 になります。したがって、文字データ型を使用する場合は、十分な列長を指定する必要があります。 参考文献
ここでmsdnリファレンス

例えば

Declare @a varchar(100)
Select @a='123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'

Select LEN(CAST(@a as Varchar)),LEN(@a)

追加情報として

長さを定義せずに VARCHAR 変数を宣言すると、デフォルトで 1 になります。

DECLARE @a VARCHAR
SET @a = 'ABCDE'
SELECT @a 

戻り値: "1"

于 2013-01-17T09:30:12.527 に答える