首页 > 解决方案 > SQL 连接列值并存储在额外的列中

问题描述

我正在使用 SQL Server 2019 (v15.0.2080.9),我有一个简单的任务,但不知何故我无法解决它......

我有一个包含名字和姓氏列的表的小数据库

CREATE TABLE [dbo].[person]
(   
    [first_name] [nchar](200) NULL,
    [last_name] [nchar](200) NULL,
    [display_name] [nchar](400) NULL
) ON [PRIMARY]
GO

我想在第三列中存储名字的组合和一个额外的空格(是的,我真的必须这样做......)。

所以我想我可能会使用 CONCAT 函数

UPDATE [dbo].[person]
SET display_name = CONCAT(first_name, ' ', last_name)

但是我的display_name专栏只显示了我的名字……那么我的 SQL 出了什么问题?

亲切的问候斯文

标签: sqlsql-server

解决方案


您的方法应该有效并且确实有效。但问题是数据类型nchar()不是nvarchar(). 这意味着它们用空格填充,并且姓氏从字符串中的位置 201 开始。

只需修复数据类型。

此外,我建议您使用计算列:

alter table person add display_name as (concat(first_name, ' ', last_name));

这确保了display_name始终是最新的——即使名称发生变化。

是一个 db<>fiddle。

注意: char()并且nchar()几乎从不合适。一个例外是当您有固定长度的字符串时,例如州或国家/地区的缩写或帐户代码。在几乎所有情况下,您都需要varchar()or nvarchar()


推荐阅读