将存储为文本数据类型的数字转换为int

时间:2013-03-11 18:36:27

标签: sql-server sql-server-2008-r2

我有一个导入结果的数据库。数据库是可交付的,我自己没有进行导入,也没有自己访问原始数据。话虽如此,有一个整数值导入到text数据类型。所有存储的值都是有效的整数。我一直在说:

Explicit conversion from data type text to int is not allowed.

如果我尝试更改表中的字段数据类型。我还在表中创建了一个新的INT字段,并尝试根据TEXT字段中的值更新它,但是我收到了同样的错误。最后,我尝试创建一个新表并尝试插入旧值但无法成功转换或转换为int。

3 个答案:

答案 0 :(得分:15)

这似乎有效:CONVERT(INT, CONVERT(VARCHAR(MAX),myText))

修改

我不完全确定内部转换的最佳选择是什么...选择VARCHAR(N)N > 10VARCHAR(MAX)的优点是不能通过截断来阻止溢出(假设在这种情况下溢出是首选行为)。

此外,转换为INT似乎将前导空格视为零。所以VARCHAR(MAX)减少了错误地归零的可能性。 E.g:

CREATE TABLE #foo ( bar TEXT )

INSERT INTO #foo
VALUES ('                                                 10')

SELECT CONVERT (INT, CONVERT(VARCHAR(MAX),bar)) FROM #foo -- 10
SELECT CONVERT (INT, CONVERT(VARCHAR(10),bar)) FROM #foo -- 0

可能最好的做法是进行一些验证,以确保输入符合您的要求。

答案 1 :(得分:5)

TextValue到Int直接转换是不可能的,所以

  1. 将TextValue转换为varchar(max)
  2. varchar(max)to int或bigint
  3. 示例:

    convert(int, (convert( varchar(max),'TextValue'))) as ColumnName
    

答案 2 :(得分:0)

您需要将文本类型转换为varchar(x),之后可以强制转换或转换为int。为了避免双重转换,我更喜欢强制转换。

CAST(CONVERT(VARCHAR(50),CONFIG_VALUE) AS INT)

完整示例:

DECLARE @age int;

SET @age = (SELECT CAST(CONVERT(varchar(50),@yourTextVarHere) AS INT))
SELECT @age