2016-12-02 5 views
1

У меня есть ниже таблицы:не в состоянии преобразовать тип данных VARCHAR в числовые

id amount 
12 974 
11 929 
9 837,5 
4 606,5 

и я взял сумму datatype as varchar(100). Теперь, когда я пытаюсь преобразовать в десятичную, тогда в это время я дал ошибку преобразования.

я написал следующий запрос:

select id,cast(amount as decimal(10,2)) as amount from table order by amount desc 

С выше запроса я получаю сообщение об ошибке: Error converting data type varchar to numeric.

Как я могу решить эту проблему?

+0

Поскольку сумма содержит ',' поэтому вы не можете преобразовать в числовой. ',' (Comma) для десятичной точки или нужно удалить? – Bharat

+0

Является ли '837,5' =' 837,5'? или что ? Что должно произойти, когда имеется более одной запятой? –

+1

замените запятую сначала, затем попробуйте ее преобразовать –

ответ

1
 create function [dbo].[udf_splitstring] (@tokens varchar(max), 
              @delimiter varchar(5)) 
    returns @split table (
     token varchar(200) not null) 
    as 
     begin 
      declare @list xml 

      select @list = cast('<a>' 
           + replace(@tokens, @delimiter, '</a><a>') 
           + '</a>' as xml) 

      insert into @split 
         (token) 
      select ltrim(t.value('.', 'varchar(200)')) as data 
      from @list.nodes('/a') as x(t) 

      return 
     end 


CREATE TABLE Table5 
     ([id] int, [amount] varchar(100)) 

     INSERT INTO Table5 
      ([id], [amount]) 
     VALUES 
     (12,'974'), 
     (11,'929'), 
     (9 ,'837,5'), 
     (4 ,'606,5') 

     select id,cast(token as decimal(10,2)) as amount from Table5 
     cross apply (select token from udf_splitstring([amount], ','))a 

    id amount 
    12 974.00 
    11 929.00 
    9 837.00 
    9 5.00 
    4 606.00 
    4 5.00 

или 2)

select id,amount,cast(replace (amount,',','.')as decimal(10,2)) as amount1 from Table5 

id amount amount1 
12 974 974.00 
11 929 929.00 
9 837,5 837.50 
4 606,5 606.50 

3)

SELECT *, 
    TRY_PARSE([amount] AS NUMERIC(10,2) USING 'El-GR') x 
FROM Table5 
+0

Привет, Спасибо за ответ. я думаю, что с этим кодом сумма конвертируется с 837,5 до 837,00 !!! – deepak

+0

это удовлетворило ваше требование .. @ deepak – Chanukya

+0

Не полностью, так как моя стоимость изменилась с 837,5 до 837,00. – deepak

0

Если строка содержит запятую, вы не можете преобразовать непосредственно десятичную вы можете преобразовать строку типа денег

;WITH t(id,amount)AS(
     SELECT 12,'974' UNION 
     SELECT 11,'929' UNION 
     SELECT 9,'837,5.123' UNION 
     SELECT 4,'606,5' 
     ) 
    SELECT id,CONVERT(MONEY,t.amount) FROM t WHERE ISNUMERIC(t.amount)=1 
 
id   
----------- --------------------- 
4   6065.00 
9   8375.123 
11   929.00 
12   974.00 
Смежные вопросы