【问题标题】:SQL - Why can't I compare varchar to varchar(15)?SQL - 为什么我不能将 varchar 与 varchar(15) 进行比较?
【发布时间】:2018-02-22 17:18:16
【问题描述】:

谁能向我解释为什么以下返回“不等于”?

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

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

我一定遗漏了一些明显的东西。

【问题讨论】:

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


【解决方案1】:

如果您打印出@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 的第一个字符。

【讨论】:

【解决方案2】:

在变量声明中使用 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  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多