Запрос 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