2017-09-21 3 views
3

J'ai une instruction case dans laquelle j'essaie de modifier deux valeurs d'un champ.SQL Server T-SQL Remplacer

CASE 
WHEN prod_map.Product_ID1 = 'CR' 
THEN REPLACE(REPLACE(cl.trade_day_count, 'ACT','ACTUAL'),cl.trade_day_count, 
'ACT+1', 'ACTUAL') 
END, 

donc, quand cl.trade_day_count contient la valeur 'ACT' ou 'ACT + 1' puis changer pour 'ACTUAL'

+0

Le le résultat du 1er remplacement est la valeur que vous voulez utiliser comme 1er paramètre sur la 2ème fonction de remplacement; vous n'avez donc plus besoin de cl.trade_date_count. Remplacer prend 3 paramètres si je me souviens, votre plus externe montre 4. – xQbert

+0

Si nous pouvons supposer que '~' n'est pas dans 'cl.trade_day_count' et ne sera jamais ... http://rextester.com/XYVO11480' Remplacer (REPLACE (REPLACE ('~' + cl.trade_day_count + '~', '~ ACT + 1 ~', 'ACTUAL'), '~ ACT ~', 'ACTUAL'), '~', '') ' – xQbert

Répondre

2

travail réponse de commentaire Alex K.:

REPLACE(REPLACE(cl.trade_day_count, 'ACT','ACTUAL'),'ACTUAL+1', 'ACTUAL') 
+1

Ceci remplacerait ACT + 1 -> ACTUAL + 1 mais je pense qu'il veut ACTUAL seul et a un problème de chevauchement –

+1

'REPLACE (REPLACE (cl.trade_day_count, 'ACT', 'ACTUAL'), 'ACT + 1', ' ACTUAL ') 'semble fonctionner correctement pour les valeurs ACT ou ACT + 1. – xQbert

+0

@ fercstar Concernant l'édition: Comment savez-vous qu'ils ne veulent pas que toutes les autres valeurs soient nulles? l'autre n'était pas dans la question originale. peut-être quand c'est CR ils veulent seulement des valeurs ACT et ACT + 1 mais affichées avec Actual? – xQbert