如何在sql server中连接字符串

问题描述 投票:0回答:5

我试图连接字符串但它似乎不起作用。有人可以告诉我下面的代码有什么问题吗?

declare @x varchar = 'a';

SET @x += 's'

SET @x = @x + 'z'

SET @x = concat('x','y')

SELECT @x;

上述方法均无效。我输出为'x'。

sql-server tsql
5个回答
7
投票

根据Aaron Bertrand的文章:

https://sqlblog.org/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length

...你不应该在没有长度的情况下宣布VARCHAR

问题是,如果您没有定义长度,SQL Server将为您分配一个长度,它可能没有您期望的那么宽。在某些情况下,它将是1(是的,这是第一,而不是拼写错误),在其他情况下,它将是30。

docs在这方面也很清楚:

varchar [(n | max)] 如果未在数据定义或变量声明语句中指定n,则默认长度为1.如果在使用CAST和CONVERT函数时未指定n,则默认长度为30。

这样可以正常工作:

declare @x varchar(10) = 'a';

SET @x += 's'

SET @x = @x + 'z'

SET @x = concat('x','y')

SELECT @x;

3
投票

当你宣布varchar()时,你需要一个长度。否则,它只有一个字符长:

declare @x varchar(255) = 'a';

一旦变量足够大以存储值,其余代码就可以工作。


3
投票

你需要告诉sql你的varchar的长度。在大多数情况下,sql将varchar视为varchar(1)

declare @x varchar(10) = 'a';
SET @x += 's'
SET @x = @x + 'z'

SET @x = concat('x','y')

SELECT @x;

2
投票

您需要使用长度声明VARCHAR,尝试将其更改为VARCHAR(20)并查看会发生什么。

声明VARCHAR没有长度会导致Length为1。


2
投票

下面的代码可以工作,记住你需要声明字符串足够长的时间来包含结果。

declare @a varchar(100)
declare @b varchar(100)

set @a = 'This should ';
set @b = 'work';
select @a + @b

如果你有这样的短字符串:

declare @a varchar(4)
declare @b varchar(4)

set @a = 'This should ';
set @b = 'work';
select @a + @b

你最终会得到结果:

'Thiswork'
© www.soinside.com 2019 - 2024. All rights reserved.