SQL Server更新命令问题
我正在使用SQLServer2000,我有一些表需要更新 问题之一是如何更新列的某些部分 例如:这里有两个表,一个是OrderDate和ShipName,另一个是 我想更改OrderDate中的日期值,例如从1996年到1999年的所有日期值,以及 ShipName中的所有“tom”均为“ken”值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
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
希望这至少能让你开始。答案中已经给出了“肮脏的方式”。“好方法”是规范化数据。它不仅更容易使用,而且速度更快:)答案中已经给出了“肮脏的方式”。“好方法”是规范化数据。它不仅更容易使用,而且速度也更快:)谢谢!完美的我真正需要的是:)谢谢!完美的我真正需要的是:)