Преобразовать varchar (255) в числовой - PullRequest
1 голос
/ 01 июня 2019

Я не могу привести преобразование типа данных varchar (255) в числовой

Amount
-1000
-500
-500,3827
-100,56
-1728,27781

Что я сделал:

CAST([Amount] as decimal(10,4) as values

Я получаю ошибку Ошибка преобразования типа данных varchar в числовой.

Что мне нужно изменить?

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Возможно, самый простой способ:

select CAST(REPLACE([Amount], ',', '.') as decimal(10, 4)) 

Примечание. Не используйте values в качестве псевдонима столбца.Это ключевое слово SQL и зарезервированное слово SQL Server.

Ваша проблема в том, что в столбце есть неверные значения.Вы можете избежать ошибки, используя:

select TRY_CAST(REPLACE(Amount, ',', '.') as decimal(10, 4)) 

Вы можете найти проблемы, используя:

select amount
from t
where TRY_CAST(REPLACE(Amount, ',', '.') as decimal(10, 4)) is  null and Amount is not null;

Мораль: Никогда хранить числовые значения в строке.

0 голосов
/ 01 июня 2019

Все эти значения слишком велики для десятичной (6,4). Давайте попробуем значение, которое подходит.
(Примечание: изменение "," на "." Для моей локали)

DECLARE @MyVar varchar(255) = '-23'

SELECT CAST(@MyVar AS decimal(6,4))

, что приводит к:

-23,0000

Подгонка вашей самой длинной (1728,27781) требует десятичной дроби (9,5):

DECLARE @MyVar varchar(255) = '1728.27781'

SELECT CAST(@MyVar AS decimal(9,5))

, что приводит к:

1728,27781

Отсюда видно, что первое число в объявлении представляет собой общее количество цифр, а второе - десятичные. Сама десятичная точка не является частью внутреннего форматирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...