Запрос Sql для преобразования nvarchar в int
Мне нужно запросить общую сумму столбца, используя агрегированную функцию. Тип данных столбца - NVARCHAR (MAX). Как преобразовать его в Integer?
Я пробовал это:
SELECT SUM(CAST(amount AS INT)),
branch
FROM tblproducts
WHERE id = 4
GROUP BY branch
... но я получаю:
Ошибка конверсии при преобразовании значения nvarchar '3600.00' в тип данных int.
Ответы
Ответ 1
3600.00 не является целым числом, поэтому CAST с помощью float first
sum(CAST(CAST(amount AS float) AS INT))
Edit:
Зачем плавать?
- нет представления о точности или масштабе во всех строках: float - меньшее зло, возможно,
- пустая строка будет отбрасываться до нуля для float, сбой на десятичной основе
- float принимает материал вроде 5E-02, терпит неудачу на десятичной основе
Ответ 2
В дополнение к gbn-ответу вам необходимо защитить от нечисловых случаев:
sum(CASE WHEN ISNUMERIC(Amount)=1 THEN CAST(CAST(amount AS float) AS INT)END )
Ответ 3
SELECT sum (Try_Parse (сумма как Int Использование "en-US" )), филиал ОТ tblproducts
WHERE id = 4
GROUP BY branch