SQL-запрос для преобразования nvarchar в Int - PullRequest
17 голосов
/ 25 сентября 2010

Мне нужно запросить общее количество столбцов, используя функцию агрегирования. Тип данных столбца - NVARCHAR (MAX). Как я могу преобразовать его в целое число?

Я пробовал это:

  SELECT SUM(CAST(amount AS INT)),
         branch 
    FROM tblproducts  
   WHERE id = 4
GROUP BY branch

... но я получаю:

Ошибка преобразования при преобразовании значения nvarchar '3600.00' в тип данных int.

Ответы [ 3 ]

30 голосов
/ 25 сентября 2010

3600.00 не является целым числом, поэтому CAST через float

sum(CAST(CAST(amount AS float) AS INT))

Edit:

Зачем плавать?

  • без понятия точности или масштаба во всех строках: float - меньшее зло, возможно
  • пустая строка будет приводить к нулю для float, с ошибкой в ​​десятичном формате
  • float принимает такие вещи, как 5E-02, с ошибкой в ​​десятичном
8 голосов
/ 25 сентября 2010

В дополнение к ответу gbn вам необходимо защитить от нечисловых случаев:

sum(CASE WHEN ISNUMERIC(Amount)=1 THEN CAST(CAST(amount AS float) AS INT)END ) 
0 голосов
/ 16 декабря 2015

ВЫБРАТЬ сумму (Try_Parse (сумма как Int, используя 'en-US')), ветвь ОТ tblproducts
ГДЕ id = 4 GROUP BY ветвь

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