Ne dites pas à quel point cela sera efficace :
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Explication :
- Supprimer % en remplaçant par un espace
- Remplacer
,
avec.
- Supprimez tous les espaces de début ou de fin.
- Convertir en
decimal(28, 10)
.
Mise à jour :
Selon les informations supplémentaires fournies par OP.
Select
convert(decimal(28,10),replace(replace(replace(rtrim(ltrim(AdditionalDescription)), ' ',''),',','.'),'%','')) AS PercentAddition
from test
where replace(rtrim(ltrim(AdditionalDescription)), ' ','')
like '[0-9]%[,.]%[%0-9]'
and
isnumeric(replace(replace(replace(rtrim(ltrim(AdditionalDescription)), ' ',''),',','.'),'%',''))=1
Explication de '[0-9]%[,.]%[%0-9]'
:
[0-9]
- Nous ne sommes intéressés que lorsque les données commencent par un chiffre.%
- Après le nombre, il peut contenir n'importe quel(s) caractère(s). Nous nous occupons des non-numériques avecisnumeric
danswhere
clause.[,.]
- Nous avons les données pour avoir soit,
ou.
.%
- Après[,.]
il peut contenir n'importe quel(s) caractère(s). Nous nous occupons des non-numériques avecisnumeric
danswhere
clause.[%0-9]
- Nous voulons que les données se terminent soit par un chiffre soit par%
.
Remarque : Vous devrez modifier '[0-9]%[,.]%[%0-9]'
au fur et à mesure que vous trouvez plus de mauvais personnages.
Références :
- SQLFiddle pour jouer avec :http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx