Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да превърна SQL подниз в десетичен?

Не мислете колко ефективно ще бъде това:

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

Обяснение:

  1. Премахване на % чрез замяна с интервал
  2. Заменете , с .
  3. Премахнете всякакви начални или завършващи интервали.
  4. Преобразуване в decimal(28, 10) .

Актуализация:

Според допълнителна информация от 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

Обяснение на '[0-9]%[,.]%[%0-9]' :

  • [0-9] - Интересуваме се само когато данните започват с число.
  • % - След числото може да съдържа всеки символ(и). Ние се грижим за нечисловите с isnumeric в where клауза.
  • [,.] - Разполагаме с данни за , или . .
  • % - След [,.] може да съдържа всеки символ(и). Ние се грижим за нечисловите с isnumeric в where клауза.
  • [%0-9] - Искаме данните да завършват или с цифра, или с % .

Забележка: Ще трябва да промените '[0-9]%[,.]%[%0-9]' тъй като намирате повече лоши герои.

Референции:

  1. SQLFiddle за игра:http://sqlfiddle.com/#!3/09a34 /4
  2. LIKE - http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разделете думите по групи за всеки ред в SQL

  2. Нови функции на SQL Server 2019

  3. Как да добавите ограничение по подразбиране към съществуваща колона в SQL Server

  4. Сравнете датите в T-SQL, игнорирайки частта от времето

  5. Таблица за присъединяване на клиенти и етикети