这是我的第一篇文章,如果我不正确地问我,我道歉。
我的结果列看起来像这样
结果_
4.5
3.2
1.1
17.1
30.2
.{not done}
.Not competed
18.0
我想要检索的是3.6以上的条目
这可能吗?我尝试将convert / cast转换为float / int / nvarchar(50)
答案 0 :(得分:0)
在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
另请查阅richard的帖子,他发布了一个自定义函数来检查值是否为数字,isnumeric将失败为'。'和' - '看起来你的行有'。'
答案 1 :(得分:0)
除了没有聚合的case语句之外,SQL Server不保证结果的排序。要在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
子句中的case语句令人不快。但是,为了防止错误,由于操作顺序很重要,因此几乎没有其他选择。