我正在使用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
提前谢谢。如果有人帮我多谢!
答案 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
希望这至少可以让你开始。