Sql 如何更新VARCHAR列,使其包含由空格分隔的另外两个VARCHAR列的内容?
我不熟悉SQL,这也许就是为什么我无法找到以下问题的解决方案 我有一个数据库表,其中所有列的类型都是Sql 如何更新VARCHAR列,使其包含由空格分隔的另外两个VARCHAR列的内容?,sql,sql-server,Sql,Sql Server,我不熟悉SQL,这也许就是为什么我无法找到以下问题的解决方案 我有一个数据库表,其中所有列的类型都是VARCHAR(50): 我想更新FullName中的值,以便它们是FirstName和LastName的组合,用空格分隔 这就是我想要的结局: 我不想手动更新每一行 我不想手动更新每一行 我将向您展示两种解决方案: 用一句话更新专栏。其实这并不麻烦: UPDATE Names SET FullName = FirstName + ' ' + LastName; -- or: … =
VARCHAR(50)
:
我想更新FullName
中的值,以便它们是FirstName
和LastName
的组合,用空格分隔
这就是我想要的结局:
我不想手动更新每一行
我不想手动更新每一行
我将向您展示两种解决方案:
用一句话更新
专栏。其实这并不麻烦:
UPDATE Names
SET FullName = FirstName + ' ' + LastName;
-- or: … = CONCAT(FirstName, ' ', LastName);
您说过您的所有列都定义为VARCHAR(50)
,因此请注意FirstName+'''+LastName
的最大长度可能达到50+1+50=101个字符。因此,FullName
有可能被截断:该列只存储前50个字符(或更少);如果有更多,它们就会被扔掉。因此,您可能需要将FullName
重新定义为VARCHAR(101)
全名
转换为计算列:
ALTER TABLE Names
DROP COLUMN FullName;
ALTER TABLE Names
ADD FullName AS (FirstName + ' ' + LastName);
此解决方案有三个明显的优点:
FullName
永远不能与FirstName
和LastName
相矛盾,因为它是通过指定的表达式从它们自动派生的(在查询时)FullName
指定类型;SQL Server会根据表达式自动计算出来FullName
不会占用任何存储空间(除非它包含在索引中)你想提供代码示例吗?我从这篇文章中尝试了几乎所有的方法,我不能删除任何列,我必须有一个合并了两个值的列。请告诉我们你的表的定义(特别是它的列的类型)。列的数据类型是navchar(50)。嗯,我认为这会起作用,我只是测试了它,仅此而已“问题”是“全名”列中的名称之间有太多的空格。@emo:Then
RTRIM(FirstName)
和LTRIM(LastName)
.MSDN reference pages:,stakx谢谢,它解决了间距问题。谢谢各位。我很想放弃一些投票,但我不能。从现在起,我将始终使用事务,以避免错误。@emo:不客气。一旦你有足够的声誉,请随时返回这里并进行投票。哦,相信我,即使使用tra,你也会犯错误(动作…;-)