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

时间:2019-02-23 00:25:32

标签: sql sql-server

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;

2 个答案:

答案 0 :(得分:1)

SQL Server不一定在其他表达式之前执行WHERE子句。子查询和CTE-同样缺乏保证。 SQL Server可以重新排列查询的元素,有时会引起诸如此类的问题。

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

只需使用TRY_CONVERT()TRY_CAST()即可:

SELECT TRY_CAST(column1 as bigint) as column1
FROM table 

答案 1 :(得分:0)

这是对我有用的确切查询

chrome.runtime.reload()