7

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

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

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

4

3 回答 3

17

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

编辑:

我不完全确定内部转换的最佳选择是什么...选择VARCHAR(N)withN > 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

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

于 2013-03-11T18:51:53.317 回答
5

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

  1. 将 TextValue 转换为 varchar(max)
  2. varchar(max) 到 int 或 bigint

例子 :

convert(int, (convert( varchar(max),'TextValue'))) as ColumnName
于 2016-12-09T08:15:24.747 回答
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
于 2018-07-10T11:52:35.573 回答