SQL Server更新命令问题

SQL Server更新命令问题,sql,sql-server,Sql,Sql Server,我正在使用SQLServer2000,我有一些表需要更新 问题之一是如何更新列的某些部分 例如:这里有两个表,一个是OrderDate和ShipName,另一个是 我想更改OrderDate中的日期值,例如从1996年到1999年的所有日期值,以及 ShipName中的所有“tom”均为“ken”值 OrderDate ShipName 1996-07-04 Vins et alcools tom 1996-07-0

我正在使用SQLServer2000,我有一些表需要更新

问题之一是如何更新列的某些部分

例如:这里有两个表,一个是OrderDate和ShipName,另一个是

我想更改OrderDate中的日期值,例如从1996年到1999年的所有日期值,以及

ShipName中的所有“tom”均为“ken”值

OrderDate    ShipName                          
1996-07-04   Vins et alcools tom         
1996-07-05   Toms Spezialitaten                
1996-07-08   Hanari tom
1996-07-08   Victuailles en tom             
1996-07-09   Supremes tom                  
1996-07-10   Hanari tom                    
所以我想要的结果是

OrderDate    ShipName                          
1999-07-04   Vins et alcools ken         
1999-07-05   Toms Spezialitaten                
1999-07-08   Hanari ken
1999-07-08   Victuailles en ken             
1999-07-09   Supremes ken            
1999-07-10   Hanari ken 

提前谢谢。如果有人帮助我,我将不胜感激

仅在tom上使用SQL Server replace函数将导致以下结果:

Update TableName
set OrderDate = dateadd(year, 3, OrderDate)
where datepart(year, OrderDate) = 1996
正确的

“某物汤姆”变成了“某物” 肯

不正确

“Toms某物”变成了“kens” 有事

要进行这种字符串替换(仅用ken替换tom,而不是用kens替换toms),您需要一个正则表达式

SQL Server不支持t-SQL语言中的正则表达式

在SQLServer2005及更高版本中,您可以通过使用clr集成来集成正则表达式,但我个人认为这是一个非常糟糕的主意。对于这些类型的更新,最干净的方法可能是使用更具表现力的语言进行字符串操作,然后在进行更改后提交更新

看看您的示例数据,有一种情况(尽管有风险)可以实现您想要的。如果字符串tom在结尾总是,则可以执行如下更新:

update TableName
set ShipName = substring(ShipName, 0, len(ShipName) -3) + ' ken'
where ShipName like '% tom'
这将用ken替换tom的所有实例

对于问题的日期部分,您可以执行以下操作:

Update TableName
set OrderDate = dateadd(year, 3, OrderDate)
where datepart(year, OrderDate) = 1996

仅在tom上使用SQL Server replace函数将导致以下结果:

Update TableName
set OrderDate = dateadd(year, 3, OrderDate)
where datepart(year, OrderDate) = 1996
正确的

“某物汤姆”变成了“某物” 肯

不正确

“Toms某物”变成了“kens” 有事

要进行这种字符串替换(仅用ken替换tom,而不是用kens替换toms),您需要一个正则表达式

SQL Server不支持t-SQL语言中的正则表达式

在SQLServer2005及更高版本中,您可以通过使用clr集成来集成正则表达式,但我个人认为这是一个非常糟糕的主意。对于这些类型的更新,最干净的方法可能是使用更具表现力的语言进行字符串操作,然后在进行更改后提交更新

看看您的示例数据,有一种情况(尽管有风险)可以实现您想要的。如果字符串tom在结尾总是,则可以执行如下更新:

update TableName
set ShipName = substring(ShipName, 0, len(ShipName) -3) + ' ken'
where ShipName like '% tom'
这将用ken替换tom的所有实例

对于问题的日期部分,您可以执行以下操作:

Update TableName
set OrderDate = dateadd(year, 3, OrderDate)
where datepart(year, OrderDate) = 1996

要更新订单日期,请尝试以下操作 更新表集合orderdate=dateadd(年份,3,orderdate)

要更新shipname,您可以尝试
update table set shipname=replace(shipname,“tom”,“ken”)

要更新订单日期,请尝试以下操作 更新表集合orderdate=dateadd(年份,3,orderdate)

要更新shipname,您可以尝试
更新表集shipname=replace(shipname,“tom”,“ken”)

尝试使用replace关键字: SUBSTRING关键字也可以帮助您:

根据您的船舶示例:

UPDATE Table1

SET ShipName = REPLACE(table1.ShipName,tom, ken)

WHERE Some_Column = Some_Value

希望这至少能让您开始学习。

尝试使用REPLACE关键字: SUBSTRING关键字也可以帮助您:

根据您的船舶示例:

UPDATE Table1

SET ShipName = REPLACE(table1.ShipName,tom, ken)

WHERE Some_Column = Some_Value

希望这至少能让你开始。

答案中已经给出了“肮脏的方式”。“好方法”是规范化数据。它不仅更容易使用,而且速度更快:)答案中已经给出了“肮脏的方式”。“好方法”是规范化数据。它不仅更容易使用,而且速度也更快:)谢谢!完美的我真正需要的是:)谢谢!完美的我真正需要的是:)