begin
declare @test_String char(60),@test_String1 char(60),
@test_String2 char(60)
set @test_String='Hello SQL Server2008!'
set @test_String1=left(@test_String,5)
set @test_String2=right(@test_String,5)
select @test_String,@test_String1,@test_String2
end
@test_String结果输出为空,而@test_String输出正确,后发现待截取字符串定义必须为varchar()
求解释原因
------解决方案--------------------
char和varchar的区别是,一个存储定长一个是变长。 定义成char(10)那么他存储的就是10个字符,不足的用空格补足,varchar是根据你的实际使用情况来存储,所以你的right得到的就是空。
------解决方案--------------------
因为char是后面填充占位的。
DECLARE @test_String CHAR(60) ,
@test_String1 CHAR(60) ,
@test_String2 varCHAR(60)
SET @test_String = 'Hello SQL Server2008!'
SET @test_String1 = LEFT(@test_String, 5)
SET @test_String2 = RIGHT(@test_String, 5)
SELECT DATALENGTH(@test_String2) --5 取出来是占位的哦。定长数据
SELECT @test_String ,
@test_String1 ,
@test_String2
------解决方案--------------------
输出的结果并不是空,而是5个空格。您可以复制一下输出结果,可以看到会出现很多空格的。