Преобразование этого varchar в десятичную с соответствующей десятичной запятой? - PullRequest
1 голос
/ 25 февраля 2010

Я играл с cast () и тому подобным с этим и не могу заставить вещи работать. У меня есть строка varchar длиной 18 символов, которую я хочу преобразовать или привести к десятичному знаку с пятью десятичными знаками. Так, например, эта строка:

00000001987600130

станет 19876,00130

Это тот случай, когда у меня всегда будет строка из 17 символов, а последние пять символов зарезервированы в качестве десятичного разряда.

Я играл с кастами и новообращенными, но я не совсем там. Например, эти утверждения сближают меня (вроде), но не совсем.

select CAST('00000001987600130' as bigint)/100000.0

select (convert(decimal(17,5),left('00000001987600130',12),0))

Если у вас есть предложение, я с удовольствием его попробую. Спасибо!

Ответы [ 2 ]

5 голосов
/ 25 февраля 2010

Это прекрасно работает для меня:

SELECT CONVERT (decimal, '00000001987600130') / 100000

Причина, по которой первый из них не сработал, заключается в том, что результатом CAST является целое число, и деление целого числа на 100000 округляет / усекает его (не уверен, какой именно), так что оно остается целым числом.

2 голосов
/ 25 февраля 2010

Чтобы убедиться, что вы получите то, что вы хотите, сделайте окончательный CAST, чтобы обеспечить точно десятичное число (17,5)

SELECT CAST((CAST('00000001987600130' AS decimal) / 100000) AS decimal(17,5))

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

...