Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL LEN函数在计算零长度整数时返回1_Sql_Sql Server_Tsql - Fatal编程技术网

TSQL LEN函数在计算零长度整数时返回1

TSQL LEN函数在计算零长度整数时返回1,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在使用SQLServer2008 我发现LEN函数在计算整数时不返回零,而整数没有值,它返回1 例如: declare @int1 int set @int1 = '' select LEN(@int1) 返回1而不是0!但是整数是零长度 为什么会这样?这是一个bug吗?int1将被初始化为“0”,因此它将返回正确的结果: declare @int1 int set @int1 = '' select @int1 select LEN(@int1) 返回: 0 1int1将被初始化为“

我正在使用SQLServer2008

我发现LEN函数在计算整数时不返回零,而整数没有值,它返回1

例如:

declare @int1 int
set @int1 = ''
select LEN(@int1)
返回1而不是0!但是整数是零长度


为什么会这样?这是一个bug吗?

int1将被初始化为“0”,因此它将返回正确的结果:

declare @int1 int set @int1 = '' 
select @int1
select LEN(@int1)
返回:

0


1

int1将被初始化为“0”,因此它将返回正确的结果:

declare @int1 int set @int1 = '' 
select @int1
select LEN(@int1)
返回:

0


1

整数没有长度。这就是你实际上正在做的

  • 创建一个INT变量
  • 创建零长度字符串
    '
  • 将该字符串强制转换为INT
    0
  • 将结果赋给变量
  • 将变量的值强制转换为字符串
    '0'
  • 计算那根绳子的长度

其结果是,您的LEN函数没有在“”上被调用,而是实际上在长度为1的“0”上被调用。

INT没有长度。这就是你实际上正在做的

  • 创建一个INT变量
  • 创建零长度字符串
    '
  • 将该字符串强制转换为INT
    0
  • 将结果赋给变量
  • 将变量的值强制转换为字符串
    '0'
  • 计算那根绳子的长度

其结果是,您的LEN函数没有在“”上被调用,但实际上是在长度为1的“0”上被调用。

您应该为整数指定NULL,使其表示“我没有值”

大概是这样的:

declare @int1 int 
set @int1 = null
select @int1 
union
select LEN(isnull(cast(@int1 as varchar),''))
返回

NULL
0

你应该给整数赋NULL,让它们表示“我没有值”

大概是这样的:

declare @int1 int 
set @int1 = null
select @int1 
union
select LEN(isnull(cast(@int1 as varchar),''))
返回

NULL
0

仅供参考,谢谢,我应该知道的。谢谢,我应该知道的。