sql >> Databáze >  >> RDS >> Sqlserver

Jak přetypovat podřetězec SQL na desítkové číslo?

Neřešte, jak efektivní to bude:

Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm 
where AdditionalDescription like '%[%]%'

Vysvětlení:

  1. Odeberte % nahrazením mezerou
  2. Nahraďte , s .
  3. Odstraňte všechny mezery na začátku nebo na konci.
  4. Převést na decimal(28, 10) .

Aktualizace:

Podle dalších informací 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

Vysvětlení '[0-9]%[,.]%[%0-9]' :

  • [0-9] - Zajímají nás pouze tehdy, když data začínají číslem.
  • % - Za číslem může obsahovat libovolný znak (znaky). O nečíselné se postaráme pomocí isnumeric v where doložka.
  • [,.] - Máme data, která mají buď , nebo . .
  • % - Za [,.] může obsahovat libovolný znak (znaky). O nečíselné se postaráme pomocí isnumeric v where doložka.
  • [%0-9] - Chceme, aby data končila buď číslicí, nebo % .

Poznámka: Budete muset upravit '[0-9]%[,.]%[%0-9]' jak najdete další špatné postavy.

Odkazy:

  1. SQLFiddle na hraní:http://sqlfiddle.com/#!3/09a34 /4
  2. LIKE - http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx


  1. PHP - IE nezobrazuje aktualizované hodnoty z databáze. Chrome, FF, Opera - OK

  2. SELECT sloupec mysql s hodnotami oddělenými čárkami

  3. Součet minut mezi více časovými obdobími

  4. Seřadit vícerozměrné pole podle daných indexů - PHP?