SQL如何从数字顺序的文本列中提取带小数的数字结果?

时间:2012-10-02 15:16:08

标签: sql

这是我的第一篇文章,如果我不正确地问我,我道歉。

我的结果列看起来像这样

结果_

4.5
3.2
1.1
17.1
30.2
.{not done}
.Not competed
18.0

我想要检索的是3.6以上的条目

这可能吗?

我尝试将convert / cast转换为float / int / nvarchar(50)

2 个答案:

答案 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将失败为'。'和' - '看起来你的行有'。'

https://stackoverflow.com/a/12674851/125551

答案 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语句令人不快。但是,为了防止错误,由于操作顺序很重要,因此几乎没有其他选择。