tSQL-преобразование из varchar в numeric работает для всех, кроме integer

у меня есть таблица с числами в

5 ответов


преобразование значения VARCHAR в INT завершается неудачно, если справа от десятичного знака есть цифры для предотвращения потери данных.

Если сначала преобразовать в FLOAT, а затем преобразовать в INT, преобразование работает.

SELECT CAST(CAST('7082.7758172' as float) as int)

возвращает

7082

на самом деле, есть ли цифры или нет, не имеет значения. Этот. (точка) запрещена, если вы хотите бросить в int. Точка не может-логически-быть частью целочисленного определения, поэтому даже:

select cast ('7.0' as int)
select cast ('7.' as int)

потерпит неудачу, но оба хороши для поплавков.


предположительно, вы хотите конвертировать значения до десятичное число для целого числа. Если да, используйте case и проверьте правильный формат:

SELECT (case when varcharcol not like '%.%' then cast(varcharcol as int)
             else cast(left(varcharcol, chardindex('.', varcharcol) - 1) as int)
        end) IntVal
FROM MyTable;

попробуй такое

declare @v varchar(20)
set @v = 'Number'
select case when isnumeric(@v) = 1 then @v
else @v end

и

declare @v varchar(20)
set @v = '7082.7758172'
select case when isnumeric(@v) = 1 then @v
else convert(numeric(18,0),@v) end

SELECT
  convert(numeric(18,5),Col1), Col2
     FROM DBname.dbo.TableName
         WHERE isnumeric(isnull(Col1,1)) <> 0