2009-12-23 8 views
0

J'utilise sql server 2000 et j'ai besoin de mettre à jour une table.Commande de mise à jour SQL Server question

l'un des problèmes est de savoir comment mettre à jour une partie de la colonne?

par exemple: voici deux tables celui-ci est OrderDate et Destinataire et

je veux changer la valeur de date dans OrderDate, tels que les 1996 années à 1999 ans et

all « tom » en Destinataire de valeur '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      

donc ce que je veux résultat sera

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 

merci d'avance. Si quelqu'un m'aide beaucoup, j'apprécie!

+1

La "manière sale" de le faire a déjà été donnée en réponse. La "bonne manière" serait de normaliser vos données. Non seulement il serait plus facile de travailler avec, mais il sera aussi plus rapide :) – Patonza

Répondre

2

Juste en utilisant SQL Server remplacer la fonction sur Tom serait le résultat suivant:

Correct

'tom quelque chose' devient 'quelque chose ken'

incorrect

'Toms quelque chose' devient 'kens quelque chose '

Pour faire ce genre de remplacement de chaîne (seulement en remplaçant tom par ken, pas par toms avec kens) vous auriez besoin d'une expression régulière. SQL Server ne prend pas en charge les expressions régulières dans le langage t-SQL.

Dans SQL Server 2005 et versions ultérieures, vous pouvez intégrer des expressions régulières à l'aide de l'intégration de clr, mais je dirais que c'est une très mauvaise idée. Pour ce genre de mises à jour, il est probablement plus simple de faire fonctionner la manipulation de chaînes dans un langage plus expressif, puis de soumettre les mises à jour après vous avoir apporté des modifications.

En regardant vos données d'exemple, il y a un cas (quoique risqué) où vous pouvez réaliser ce que vous voulez. Si la chaîne est tom toujours à la fin, vous pouvez faire une mise à jour comme celui-ci:

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

qui remplacera toutes les instances de tom à la fin avec ken.

Pour la partie date de votre question, vous pouvez faire quelque chose comme ce qui suit:

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

Merci! parfait! .. ce dont j'ai besoin en fait :) – paul

3

Pour mettre à jour la date de commande, essayez quelque chose comme table de mise à jour mis OrderDate = dateadd (année, 3, OrderDate)

pour mettre à jour la, vous pouvez essayer Destinataire mise à jour set de table = remplacer Destinataire (Destinataire, "tom", "ken")

+0

Merci! Pour votre aide! – paul

Questions connexes