我在表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'.
我在这里遗失或不理解的任何事情?......附有图片
答案 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”