2009-12-23 82 views
0

我正在使用sql server 2000,我有一些表需要更新。SQL Server更新命令問題

問題之一是如何更新列的某些部分?

例如:這裏是二表一個是訂購日期和貨主和

我想改變在訂購日期時間價值,例如像所有1996年至1999年,

所有「嗵」的貨主到'肯' 值

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 

提前致謝。如果有人幫我欣賞!

+1

這樣做的「骯髒的方式」已經在答案中給出。 「好方法」是規範化你的數據。不僅會更容易處理,它也會更快:) – Patonza 2009-12-23 22:50:28

回答

2

只需使用SQL Server取代湯姆功能會導致如下:

正確

'的東西湯姆' 變爲'東西 肯

錯誤

'Toms something'become'kens 東西'

要做那樣的字符串替換(只替換湯姆與肯,而不是湯姆與kens),你需要一個正則表達式。

SQL Server不支持t-sql語言中的正則表達式。

在SQL Server 2005及更高版本中,您可以通過使用clr集成來集成正則表達式,但我個人認爲這是一個非常糟糕的主意。對於這些更新,使用更具表現力的語言進行字符串處理工作可能是最乾淨的,然後在進行更改後提交更新。

看看你的示例數據,有一個(雖然有風險)的情況下,你可以實現你想要的。如果字符串湯姆是總是在最後,你可以這樣做的更新:

update TableName 
set ShipName = substring(ShipName, 0, len(ShipName) -3) + ' ken' 
where ShipName like '% tom' 

將取代湯姆的所有實例在與肯結束。

對於你的問題的日期部分,你可以做類似如下:

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

謝謝!完美!..我其實需要:) – paul 2009-12-24 04:05:37

3

更新訂單日期,嘗試像 更新表設置訂購日期= DATEADD(今年3,訂購日期)

更新貨主你可以嘗試 更新表集運貨=替換(貨主,「湯姆」,「肯」)

+0

謝謝!您的幫助! – paul 2009-12-24 04:06:27