SQL Server更新命令问题

时间:2009-12-23 22:28:03

标签: sql sql-server

我正在使用sql server 2000,我需要更新一些表。

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

例如:这里有两个表,一个是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 
提前谢谢。如果有人帮我多谢!

3 个答案:

答案 0 :(得分:3)

要更新订单日期,请尝试类似的操作 update table set orderdate = dateadd(year,3,orderdate)

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

答案 1 :(得分:2)

在tom上使用SQL Server替换功能会导致以下结果:

正确

  “某事汤姆”成为'某事   肯'

不正确的

  

'Toms something'成为'kens   某物“

要做那种字符串替换(只用ken代替tom,而不是用kens代替toms),你需要一个正则表达式。

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

在SQL Server 2005及更高版本中,您可以使用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

答案 2 :(得分:1)

尝试使用REPLACE关键字:http://msdn.microsoft.com/en-us/library/ms186862.aspx SUBSTRING关键字也可以为您提供帮助:http://msdn.microsoft.com/en-us/library/aa259342%28SQL.80%29.aspx

根据你的船只示例:

UPDATE Table1

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

WHERE Some_Column = Some_Value

希望这至少可以让你开始。