我有一个导入结果的数据库。数据库是可交付的,我自己没有进行导入,也没有自己访问原始数据。话虽如此,有一个整数值导入到text数据类型。所有存储的值都是有效的整数。我一直在说:
Explicit conversion from data type text to int is not allowed.
如果我尝试更改表中的字段数据类型。我还在表中创建了一个新的INT字段,并尝试根据TEXT字段中的值更新它,但是我收到了同样的错误。最后,我尝试创建一个新表并尝试插入旧值但无法成功转换或转换为int。
答案 0 :(得分:15)
这似乎有效:CONVERT(INT, CONVERT(VARCHAR(MAX),myText))
修改强>
我不完全确定内部转换的最佳选择是什么...选择VARCHAR(N)
与N > 10
或VARCHAR(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直接转换是不可能的,所以
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