这是我的第一篇文章,如果我问的不正确,我深表歉意。
我的结果列看起来像这样
结果_
4.5
3.2
1.1
17.1
30.2
.{not done}
.Not competed
18.0
我想做的是检索高于 3.6 的条目
这可能吗?
我已经尝试转换/转换为 float/int/nvarchar(50)
这是我的第一篇文章,如果我问的不正确,我深表歉意。
我的结果列看起来像这样
结果_
4.5
3.2
1.1
17.1
30.2
.{not done}
.Not competed
18.0
我想做的是检索高于 3.6 的条目
这可能吗?
我已经尝试转换/转换为 float/int/nvarchar(50)
在 sql server 你可以这样做
;with cte as (
Select * from table where isnumeric(result_col) = 1)
select * from cte where cast(result_col as decimal(18,1)) > 3.6
order by result_col
还要检查理查德的这篇文章,他在其中发布了一个自定义函数来检查一个值是否为数字,isnumeric 将因“。”而失败。和'-',看起来你有'。'的行
SQL Server 不保证结果的顺序,除非是没有聚合的 case 语句。要在 SQL Server 中执行此操作并保证不会出现错误:
select *
from t
where (case when isnumeric(col) = 1 then cast(col as float) end) > 3.6
在其他数据库中,您将使用正则表达式或类似模式来匹配数字:
where (case when col like '[0-9]*' or col like '[0-9]*.[0-9]*' then cast(col as float) end) > 3.6
我承认该WHERE
条款中的案例陈述令人不快。但是,为了防止错误,几乎没有其他选择,因为操作的顺序很重要。