sql – 将varchar转换为bigint并返回仅大于特定数字的结果?

Q1.为什么我的转换不适用于以下试验?

Q2.如何将varchar转换为bigint并从varchar列返回大于90的结果?

我在Microsoft SQL Server 2014 Management Studio上.

我知道我可以通过以下方式检索数字:

SELECT column1 FROM table WHERE ISNUMERIC(column1) = 1

但现在我想添加它并返回大于90的结果.但在我能做到这一点之前,我在尝试转换时不断收到此错误.我试图将varchar转换为bigint,因为我在varchar列中有一些非常大的数字.这是错误 – >将数据类型varchar转换为bigint时出错.

例如,我在列中有这些值

50
65
98
199
9999999
9999999999

预期成绩

98
199
9999999
9999999999

尝试过的查询

试验1

SELECT 
    CAST(P0.column1 as bigint) as column1
FROM
     (
      SELECT column1 FROM table WHERE ISNUMERIC(column1) = 1
     ) P0

试用2

select case when isnumeric(column1 ) = 1 
        then cast(column1 as bigint) 
        else NULL 
   end
from table 

试验3

select * 
into TempTable 
FROM table WHERE Cast(ISNUMERIC(column1) as bigint) = 1 and column1> '90';

试验4

Insert into TempTable (column1, column2, column3, column4, column5)
select column1, column2, column3, column4, Cast(ISNUMERIC(column5) as 
bigint) 
from table;

试验5

select cast(Param_Value as bigint) from Setting_Alert_Value;

最佳答案 SQL Server不会在其他表达式之前执行WHERE子句.子查询和CTE – 同样缺乏保证. SQL Server可以重新排列查询的元素,有时会导致这样的问题.

此外,ISNUMERIC()不保证某些内容可以转换为整数.

只需使用TRY_CONVERT()或TRY_CAST()代替:

SELECT TRY_CAST(column1 as bigint) as column1
FROM table 
点赞