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