使用left和patindex更新信息

时间:2018-08-27 08:28:37

标签: sql sql-server tsql

我必须根据现有列更新一列。要更新的列是业务。现有列是部门。并非所有部门都有冒号(:)

这就是我需要得到的:

表1

业务部门

 Xerox         Xerox            
 Google        Google: Development
 Zas           Zas: Selling
 Worten        Worten

我使用过T-SQL:

UPDATE Table 1
set business=left(Department,patindex('%:%',Department))

我得到的是什么

业务部门

               Xerox            
 Google:       Google: Development
 Zas:          Zas: Selling
               Worten

我试图在patindex之后放置-1,但这是禁止的。这将摆脱结肠。因此,我需要另一种方法来摆脱冒号并在业务专栏中使worten和xerox出现。

2 个答案:

答案 0 :(得分:1)

UPDATE [Table 1]
set business=
case when patindex('%:%',Department)>0 then left(Department,patindex('%:%',Department)-1)
else Department
end;

除非这是清理数据的步骤,否则您也可以只创建具有相同表达式的计算列。

答案 1 :(得分:1)

我会这样写:

update Table 1
    set business = left(Department, charindex(':', Department + ':') - 1);

首先,相对于charindex(),我更喜欢patindex()。毫无疑问,这是因为我多次不使用通配符。

第二,您只需在部门末尾添加一个冒号即可消除条件逻辑。这简化了逻辑。