2012-11-26 59 views
1

我想我有一个简单的问题。我想运行一个varchar变量中的字符对并检查一些内容。我试图用这个简单的代码(如下图所示) ,但我得到'ho'印两次。为什么不是第二个LEFT的作品?使用LEFT函数遍历字符串

declare 
@name nvarchar(50), 
@temp nvarchar(50) 
set @name = 'house' 
set @temp = @name 
set @temp = Left(@temp,2) 
print @temp 
set @temp = Left(@temp,2) 
print @temp 

回答

0

这是工作,正是因为它应该是:

declare 
@name nvarchar(50), 
@temp nvarchar(50) 
set @name = 'house' 
set @temp = @name 
set @temp = Left(@temp,2) --here @temp has ho 
print @temp 
set @temp = Left(@temp,2) -- you are trying again to get 
          --left ('ho',2) 
          --this will again return you ho 
print @temp 

起初set @temp = Left(@temp,2),要设置临时举行'ho'。在第二组声明中,您再次尝试访问字符串'ho'左侧的2个字符,这将再次为您提供相同的内容。

+0

哦我傻!谢谢 –

+0

@EladFranklin,欢迎您 – Habib

1

MSDN documentation摘自:

返回一个字符串,指定的字符数 的左侧部分。

因此Left(@temp,2)将返回 “豪”

Left("ho",2)也将返回 “豪”。

因此,你总是会得到“ho”。


如果你想PRINT的前两个字母,然后删除它们,你可以这样做:

PRINT Left(@temp,2) 
SET @temp = SUBSTRING(@temp, 2, LEN(@temp)-2) 

如果你是再次打电话Left(@temp,2),你会得到“我们”

0

SQL Server中的LEFT()函数将只打印从字符串左侧指定的字符数。对于你的需求,你需要使用SUBSTRING()函数和WHILE语句。一个例子如下:

declare @str varchar(5)='house' 
declare @i int = 1 
while @i<len(@str) 
begin 
print SUBSTRING(@str,@i,2) 
set @[email protected]+1 
end 

输出: 豪 欧 我们 SE Ë