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