如何在SQL Server查询中连接文本?

81

以下是SQL语句:

SELECT notes + 'SomeText'
FROM NotesTable a 

给出错误:

在加法操作符中,nvarchar 和 text 数据类型不兼容。

6个回答

82

唯一的方法就是将您的文本字段转换为nvarchar字段。

Select Cast(notes as nvarchar(4000)) + 'SomeText'
From NotesTable a

否则,我建议在您的应用程序中执行连接操作。


那么你将text转换为一个“巨大”的4000个nvarchar,以确保几乎任何东西都能适应? - Matthieu

23

您也许需要考虑 NULL 值。在您的示例中,如果列 notes 有一个空值,那么结果值将是 NULL。如果您希望空值行为像空字符串一样(以便答案变成“SomeText”),则使用 IsNull 函数:

您可能还需要考虑 NULL 值。如果您的示例中,notes 列包含 NULL 值,则结果也将为 NULL。如果您希望空值行为像空字符串一样(使得答案变成 "SomeText"),那么请使用 IsNull 函数:

Select IsNull(Cast(notes as nvarchar(4000)),'') + 'SomeText' From NotesTable a

21

如果您正在使用SQL Server 2005或更高版本,根据Notes字段中数据的大小,您可能需要考虑将其转换为nvarchar(max),而不是转换为特定长度,这可能导致字符串被截断。

Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a

2
这应该是正确的答案。它避免了截断文本。 - billy
它是否使用更多的内存,或者它是否以某种方式“自适应”于源大小? - Matthieu

6

为了将它们连接起来,您必须显式地将字符串类型转换为相同的类型。在您的情况下,您可以通过在“SomeText”前面添加“N”(N'SomeText')来解决此问题。如果这样不行,请尝试使用Cast('SomeText' as nvarchar(8))。


5

另一种选择是使用CONCAT命令:

SELECT CONCAT(MyTable.TextColumn, 'Text') FROM MyTable

2

如果您正在使用SQL Server 2005(或更高版本),您可能希望在表定义中考虑切换到NVARCHAR(MAX); SQL Server 2000的TEXT,NTEXT和IMAGE数据类型将在未来的SQL Server版本中被弃用。 SQL Server 2005提供了向后兼容性,但您应该使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接