Sql server SQL Server-将数据类型varchar转换为bigint时出错
我不确定我做错了什么,但我在子查询中得到了以下错误Sql server SQL Server-将数据类型varchar转换为bigint时出错,sql-server,Sql Server,我不确定我做错了什么,但我在子查询中得到了以下错误 Select* from (select CONVERT (BIGINT,AX$AC1) as [Account] from [x].[y] where [AXOBJ] >399999 AND [AX$AC1] NOT like '%NON BENCHMARK%')a where a.[Account]>=510980 它回来了 Msg 8114,第16级,第5状态,第1行 将数据类型varchar转换为bigint时出错
Select*
from
(select
CONVERT (BIGINT,AX$AC1) as [Account]
from
[x].[y]
where [AXOBJ] >399999 AND [AX$AC1] NOT like '%NON BENCHMARK%')a
where a.[Account]>=510980
它回来了
Msg 8114,第16级,第5状态,第1行
将数据类型varchar转换为bigint时出错
我运行以下命令来捕获此表的数据类型
select * from INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='y'
| COLUMN_NAME | DATA_TYPE |
|-------------|-----------|
| AXOBJ | char |
| AX$AC1 | char |
下面的代码返回39个整数值
select
CONVERT (BIGINT,AX$AC1) as [Account]
from
[x].[y]
where [AXOBJ] >399999 AND [AX$AC1] NOT like '%NON BENCHMARK%' GROUP BY AX$AC1
我不确定哪里出了问题。您可以使用:
如果删除
[Account]>510980会话将失败,您将发现null
值。我认为错误在于您的where条件where[AXOBJ]>399999
,也是最后一个where条件where a.[Account]>=510980
请尝试下面的代码
Select*
from
(select
CONVERT (BIGINT,AX$AC1) as [Account]
from
[x].[y]
where CONVERT(bigint,[AXOBJ]) >399999 AND [AX$AC1] NOT like '%NON BENCHMARK%')a
where CONVERT(bigint,a.[Account]) >= 510980
没有样本数据,我们只能猜测。将CONVERT(BIGINT,AX$AC1)
替换为TRY\u CONVERT(BIGINT,AX$AC1)
。我打赌你会得到一些NULL
值。但为什么要将数字数据存储为varchar
?像'1.0'
这样的值不能转换为bigint
。AXOBJ&AX$AC1属于char类型,该列的长度是多少?简单的答案是了解您的数据类型,了解隐式转换的规则,以及了解如何编写/使用特定数据类型的文本。@Larnu非常感谢。是,TRY\u CONVERT(BIGINT,AX$AC1)
返回大量空值。我将我的查询修改为,其中[AXOBJ]>399999和[AX$AC1]与“%NON BENCHMARK%”不同,并尝试转换(BIGINT,AX$AC1)>=510980
。它给了我我所需要的。但为什么要将数字数据存储为varchar呢我不是DBA。我只是访问视图。再次非常感谢。但是AXOBJ也是一个字符串。我想你的意思是“在哪里转换会失败”?
Select*
from
(select
CONVERT (BIGINT,AX$AC1) as [Account]
from
[x].[y]
where CONVERT(bigint,[AXOBJ]) >399999 AND [AX$AC1] NOT like '%NON BENCHMARK%')a
where CONVERT(bigint,a.[Account]) >= 510980