代码之家  ›  专栏  ›  技术社区  ›  oglester

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

  •  75
  • oglester  · 技术社区  · 17 年前

    以下SQL:

    SELECT notes + 'SomeText'
    FROM NotesTable a 
    

    给出错误:

    添加运算符中的数据类型nvarchar和文本不兼容。

    6 回复  |  直到 8 年前
        1
  •  78
  •   GateKiller    17 年前

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

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

    否则,我建议在应用程序中执行串联。

        2
  •  22
  •   Chris Wuestefeld    17 年前

    您可能还需要考虑空值。在您的示例中,如果列 笔记 有一个空值,则结果值将为空。如果希望空值的行为为空字符串(以便得到“someText”),则使用isNull函数:

    Select IsNull(Cast(notes as nvarchar(4000)),'') + 'SomeText' From NotesTable a
    
        3
  •  18
  •   Scott Nichols    17 年前

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

    Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a
    
        4
  •  6
  •   Craig    17 年前

    您必须显式地将字符串类型强制转换为相同的类型,以便将它们连接起来,在这种情况下,您可以通过在“sometext”(n“sometext”)前面简单地添加“n”来解决问题。如果这不起作用,请尝试cast(“someText”作为nvarchar(8))。

        5
  •  3
  •   David Gausmann    8 年前

    另一个选择是 CONCAT 命令:

    SELECT CONCAT(MyTable.TextColumn, 'Text') FROM MyTable
    
        6
  •  2
  •   Community Mohan Dere    14 年前

    如果您使用的是SQL Server 2005(或更高版本),则可能需要考虑在表定义中切换到nvarchar(max);SQL Server 2000的文本、ntext和图像数据类型在未来的SQL Server版本中将不推荐使用。SQL Server2005提供了对数据类型的向后兼容性,但您可能应该改用varchar(max)、nvarchar(max)和varbinary(max)。