преобразование varchar в int-проблемы - PullRequest
0 голосов
/ 20 сентября 2019

Следующий запрос пытается преобразовать тип данных varchar в int - но он не работает.Знаете ли вы, почему?

SELECT 
    CONVERT(INT, [BR]) AS dd,
    CAST([BR] AS INT) AS cc
FROM 
    [Seg].[dbo].[pro_ben]

Я получаю сообщение об ошибке:

Сообщение 245, Уровень 16, Состояние 1, Строка 2
Преобразование не удалось при преобразовании значения varchar '3893,768 'для типа данных int

Ответы [ 4 ]

1 голос
/ 20 сентября 2019

Очевидно, что ваша строка имеет десятичную часть, поэтому вы не можете привести ее непосредственно к целому числу.

Решением было бы сначала CAST к числу с плавающей запятой, а затем к целому числу, например:

SELECT CAST( CAST([BR] AS FLOAT) AS INT) AS CC FROM [Seg].[dbo].[pro_ben]

Демонстрация на DB Fiddle :

SELECT CAST('3893.768' AS FLOAT)
| (No column name) |
| ---------------: |
|         3893.768 |
SELECT CAST( CAST('3893.768' AS FLOAT) AS INT)
| (No column name) |
| ---------------: |
|             3893 |
1 голос
/ 20 сентября 2019

Значение не является целым числом.Это оставляет вам различные варианты:

  • Вы можете использовать try_convert(), который будет возвращать NULL.
  • Вы можете использовать промежуточный тип данных и затем преобразовать в окончательный тип данных., но вы можете потерять точность (при некоторых обстоятельствах).
  • Вместо этого вы можете преобразовать в numeric().

Преобразование в numeric игнорирует десятичные точки, но онине вызывает ошибку:

SELECT convert(numeric(10,0), [BR]) as dd
FROM [Seg].[dbo].[pro_ben];

Затем вы можете преобразовать в int, если вам конкретно нужен этот тип.

0 голосов
/ 20 сентября 2019

Я бы попробовал

Select Round([BR],0) as dd
FROM [Seg].[dbo].[pro_ben];
0 голосов
/ 20 сентября 2019

мммм появляется, когда я меняю тип данных на float, все работает.

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