Jangan pikirkan seberapa efisien ini:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Penjelasan:
- Hapus % dengan mengganti dengan spasi
- Ganti
,
dengan.
- Hapus spasi awal atau akhir.
- Konversikan ke
decimal(28, 10)
.
Pembaruan:
Sesuai info tambahan oleh 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
Penjelasan '[0-9]%[,.]%[%0-9]'
:
[0-9]
- Kami hanya tertarik jika data dimulai dengan angka.%
- Setelah nomor itu mungkin berisi karakter apa pun. Kami menangani non-numerik denganisnumeric
diwhere
klausa.[,.]
- Kami memiliki data untuk memiliki,
atau.
.%
- Setelah[,.]
itu mungkin berisi karakter apa pun. Kami menangani non-numerik denganisnumeric
diwhere
klausa.[%0-9]
- Kami ingin data diakhiri dengan angka atau%
.
Catatan: Anda harus mengubah '[0-9]%[,.]%[%0-9]'
saat Anda menemukan lebih banyak karakter buruk.
Referensi:
- SQLFiddle untuk dimainkan:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx