使用LEFT函数迭代字符串

时间:2012-11-26 11:03:31

标签: sql sql-server

我想我有一个简单的问题。我想在varchar变量中运行一对chars并检查一下。我试着用这个简单的代码(如下图所示) 但是我打印了两次。为什么第二个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

3 个答案:

答案 0 :(得分:1)

取自MSDN documentation

  

返回具有指定编号的字符串的左侧部分   人物。

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

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

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


如果您希望PRINT前2个字母,然后删除它们,您可以这样做:

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

如果您要再次致电Left(@temp,2),您将获得“我们”

答案 1 :(得分: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个字符,这将再次为您提供相同的内容。

答案 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 @i=@i+1
end

输出: 浩 OU 我们 SE ë