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;
答案 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()