SQL查询行为

时间:2013-01-17 09:17:46

标签: sql-server

我在表CLIENTDET中有一个名为'CLIENTDATA'的列,其数据类似'last-ST - Tranactions - Challan Details - 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'.

我在这里遗失或不理解的任何事情?......附有图片

enter image description here

1 个答案:

答案 0 :(得分:3)

将文字转换为字符类型而不指定长度时,
默认情况下是30。 因此,在使用字符数据类型时,需要指定足够的列长度。 Ref.
在这里msdn reference

e.g。

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”