将 varchar(MAX) 列转换为 int 是否会导致数据丢失
does conversion of varchar(MAX) columns to int result in data loss
我在 SQL 服务器 table 中有一个 'varchar(MAX)' 数据类型列,我想将其更改为 'int' 数据类型。会不会导致数据丢失
从SQL服务器documentation可以发现最大的bigint值是9,223,372,036,854,775,807
,即宽度为19个字符的数字。另一方面,varchar(max)
可以比 19 个字符宽得多。因此,如果您的文本数据的数字大于此最大 int 值,则强制转换会溢出 int 列。
这会导致数据丢失,具体取决于该列中的现有值。你可以测试它如下图-
declare @tmp_tbl table (col_1 varchar(max))
insert into @tmp_tbl (col_1)
select '12345'
union all
select '1098.98'
union all
select 'abcde'
union all
select '2147483647'
union all
select '2147483648'
select try_convert(int, col_1)
from @tmp_tbl
Try_Convert
函数将 return 当值不可转换为 Int 时为 Null。
我在 SQL 服务器 table 中有一个 'varchar(MAX)' 数据类型列,我想将其更改为 'int' 数据类型。会不会导致数据丢失
从SQL服务器documentation可以发现最大的bigint值是9,223,372,036,854,775,807
,即宽度为19个字符的数字。另一方面,varchar(max)
可以比 19 个字符宽得多。因此,如果您的文本数据的数字大于此最大 int 值,则强制转换会溢出 int 列。
这会导致数据丢失,具体取决于该列中的现有值。你可以测试它如下图-
declare @tmp_tbl table (col_1 varchar(max))
insert into @tmp_tbl (col_1)
select '12345'
union all
select '1098.98'
union all
select 'abcde'
union all
select '2147483647'
union all
select '2147483648'
select try_convert(int, col_1)
from @tmp_tbl
Try_Convert
函数将 return 当值不可转换为 Int 时为 Null。