Goran Bibic Ответов: 2

Преобразовать varchar в SQL значение в десятичной системе с сепаратором ,


Преобразовать varchar в double?

Код работает нормально но нет суммы для значений с разделителем ,

пример 47,256.22

Это значение просто прыгает и не имеет значения в столбце sum

Что я уже пробовал:

select datum, SUM (Try_Convert(float,[iznos_sa_pdv])) as UKUPNO
from mp_kasa_lista
group by datum

Goran Bibic

Выбрать сумма(заменить(конвертировать(тип varchar,конвертировать(тип varchar,iznos_sa_pdv),1), '#,0.00',")) как UKUPNO
от mp_kasa_lista
группировка по данным

Ошибка-Msg 8117, Уровень 16, состояние 1, строка 28
Тип данных операнда varchar недопустим для оператора суммы

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Код работает нормально но нет суммы для значений с разделителем

Вы только что испытали причину, по которой числовые типы данных существуют в базах данных SQL.
Вы только что испытали причину, по которой серьезные администраторы баз данных никогда не хранят числовые значения в строковых полях.
Храня числовые данные в строках, вы облегчаете свою жизнь 1 раз, когда вставляете данные, но вы усложняете ее каждый раз, когда используете эти данные, это выбор.
Цитата:
Код работает нормально но нет суммы для значений с разделителем

Перед преобразованием в float вам необходимо удалить разделитель тысяч, как указано в решении 1.

Уже 37 вопросов Q&A !
Не кажется ли вам, что пришло время серьезно изучить основы SQL ?
Учебник по SQL[^]


Goran Bibic

Спасибо за совет, учусь каждый день

выберите datum, SUM (Try_Convert(float,[iznos_sa_pdv])) как УКУПНО
от mp_kasa_lista
группировка по данным

Это хорошее решение моей проблемы

но без разделителя...Я удалю сапаратор и настрою его в значении c#. Спасибо

Рейтинг:
13

Wendelius

Проблема в том, что у вас есть разделитель тысяч в числе. Попробуйте заменить запятую. Например

select sum( try_convert(float, replace(b.a, ',', '') ) )
from (
	select '47,256.22' as a
	union all
	select '47,256.22' as a) as b

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


Goran Bibic

Сори...Я не понимаю, что делать...не могли бы вы попробовать применить мой код, чтобы попытаться понять...
Мне просто нужен столбец типа varchar суммы заказа дата и разделитель тысяч ,

Wendelius

Что-то вроде

выберите опорную точку, сумма (Try_Convert(поплавок,заменить([iznos_sa_pdv], ',', "))) как UKUPNO
от mp_kasa_lista
группировка по данным