SQL - 为什么我不能将varchar与varchar(15)进行比较?

时间:2018-02-22 17:18:17

标签: sql sql-server sql-server-2012

任何人都可以向我解释为什么以下返回'不等于'?

DECLARE @X15 varchar(15) = 'ABC'
DECLARE @X varchar = @X15

SELECT CASE WHEN @X = @X15 THEN 'Equal' ELSE 'Not equal' END

我一定错过了一些明显的东西。

2 个答案:

答案 0 :(得分:3)

如果您打印@X,您会看到问题:

DECLARE @X15 varchar(15) = 'ABC'
DECLARE @X varchar = @X15

SELECT LEN(@X), @X, CASE WHEN @X = @X15 THEN 'Equal' ELSE 'Not equal' END

如果您没有指定varchar的长度,则默认为1个字符,因此@X变量只能包含@X15的第一个字符。

答案 1 :(得分:0)

在变量声明中使用char和varchar数据类型时,n的默认值为1。

例如: -

DECLARE @myVariable AS varchar = 'abc';  
DECLARE @myNextVariable AS char = 'abc'; 
DECLARE @myVariableWithLength AS varchar(15) = 'abc'; 
--The following returns 1  
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable),DATALENGTH(@myVariableWithLength);  
GO