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

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

我有一个导入结果的数据库。数据库是可交付的,我没有自己进行导入,也无法访问原始数据来自己进行导入。也就是说,有一个整数值被导入到文本数据类型中。所有存储的值都是有效整数。我不断得到:

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

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

最佳答案

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

编辑:

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

此外,转换为 INT 似乎将前导空格视为零。因此 VARCHAR(MAX) 减少了错误地获取零的机会。例如:

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

可能最好的办法是进行一些验证,以确保输入满足您的要求。

关于sql-server - 将存储为文本数据类型的数字转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15346002/

相关文章:

tsql - SQL Server 2008 R2 中的日期时间计算

sql - 选择 SQL Server 数据库大小

sql-server - 如何查看哪个表占用了多少存储空间?

SQL Server 选择排名数据的第一个实例

c# - 如何安全地创建一个查询,该查询将列出给定表名的列名以及可能指向 SQL Server 或 MySQL 的连接字符串?

sql - 差异备份大小太大

SQL 将列设置为行数

sql-server - 如果是 DATETIME 或 DATETIME2,为什么索引可能不会做太多事情,因为它们包含时间部分?

sql-server - 如何从两个不同的表创建自定义表

t-sql - 左连接没有达到我的预期