SQL 更新查询中的意外执行

d29*_*907 0 sql sql-server updates sql-update sql-server-2012

我在 SQL Server 2012 中通过更新查询得到“意外”结果。这就是我想要做的。

从由ID ','name(例如258967,Sarah Jones )组成的列(IDENTIFIER)中,我必须填写其他两列:IDSELLER_NAME

原始列有一些值,末尾有一个空白,其余的没有它:

'258967,Sarah Jones'
'98745,Richard James '
Run Code Online (Sandbox Code Playgroud)

这是我正在执行的更新查询:

UPDATE SELLER
SET 
IDENTIFIER = LTRIM(RTRIM(IDENTIFIER)),
ID = Left(IDENTIFIER , charindex(',', IDENTIFIER )-1),
SELLER_NAME = UPPER(RIGHT((IDENTIFIER ),LEN(IDENTIFIER )-CHARINDEX(',',IDENTIFIER )));
Run Code Online (Sandbox Code Playgroud)

但我最后得到了错误的结果

258967,Sarah Jones    258967  SARAH JONES
98745,Richard James    98745   ICHARD JAMES
Run Code Online (Sandbox Code Playgroud)

所有末尾有空格的名称都会发生同样的情况。此时我想知道,如果我已经指定我要在第一个操作中消除 IDENTIFIER 值开头和结尾的所有空格,为什么系统会更新 ID 和 SELLER_NAMES 然后执行此操作?。

只是要指定: IDENTIFIER 列是卖方表的一部分,该表正在从另一个人那里更新,该人从 Excel 文件中导入数据。我收到这个值,我必须规范化信息。我只能阅读 SELLER 表,在回答之前考虑到这一点

Hav*_*ame 5

试试这个,因为你在名字的右边有空格,所以它只会从名字中截断一个字符。所以只需要RTRIM(IDENTIFIER),就是这样。

SELLER_NAME = UPPER(RIGHT((RTRIM(IDENTIFIER)),LEN(IDENTIFIER )-CHARINDEX(',',IDENTIFIER)));
Run Code Online (Sandbox Code Playgroud)