仅更新SQL中的特定记录

仅更新SQL中的特定记录,sql,sql-server-2008,replace,sql-update,str-replace,Sql,Sql Server 2008,Replace,Sql Update,Str Replace,关于更新我正在处理的表中的一些记录,我有一个问题 表employee有一个ID为(字符串值)的列,如下所示: 雇员ID 所以有些记录只是数字,有些记录后面有感叹号和字母。我需要做的是只更新包含的记录!还有这些信。 因此最终结果如下所示: 雇员ID 以下是我到目前为止的情况: declare @newID nvarchar(80) set @newID = ( select LEFT(employee.employeeID,CHARINDEX('!',employee.employeeID)-1)

关于更新我正在处理的表中的一些记录,我有一个问题

表employee有一个ID为(字符串值)的列,如下所示:

雇员ID 所以有些记录只是数字,有些记录后面有感叹号和字母。我需要做的是只更新包含的记录!还有这些信。 因此最终结果如下所示:

雇员ID 以下是我到目前为止的情况:

declare @newID nvarchar(80)
set @newID =
(
select LEFT(employee.employeeID,CHARINDEX('!',employee.employeeID)-1) as newID
from employee
where employeeID like '%!%'
)


update employee set employeeID=@newID where employeeID like '%!%';
我知道问题是什么,当我有多个记录可以是newID,但任何指针都会受到欢迎时,这不起作用

我尝试使用替换功能,但是模式现在总是一样的,唯一不变的是!符号之后的任何内容都可以丢弃


谢谢。

您可以使用字符串函数执行此操作:

update employee
    set employeeId = left(employeeId, chardindex('?', employeeId) - 1)
    where employeeID like '%?%';

您是指感叹号(
)还是问号(
)?请添加您正在使用的数据库服务器的标签!现在我看到了它,我意识到与我试图声明一个变量相比,它是多么简单。谢谢!
declare @newID nvarchar(80)
set @newID =
(
select LEFT(employee.employeeID,CHARINDEX('!',employee.employeeID)-1) as newID
from employee
where employeeID like '%!%'
)


update employee set employeeID=@newID where employeeID like '%!%';
update employee
    set employeeId = left(employeeId, chardindex('?', employeeId) - 1)
    where employeeID like '%?%';