0

这是我的第一篇文章,如果我问的不正确,我深表歉意。

我的结果列看起来像这样

结果_

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

我想做的是检索高于 3.6 的条目

这可能吗?

我已经尝试转换/转换为 float/int/nvarchar(50)

4

2 回答 2

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

还要检查理查德的这篇文章,他在其中发布了一个自定义函数来检查一个值是否为数字,isnumeric 将因“。”而失败。和'-',看起来你有'。'的行

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

于 2012-10-02T15:23:09.197 回答
0

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条款中的案例陈述令人不快。但是,为了防止错误,几乎没有其他选择,因为操作的顺序很重要。

于 2012-10-02T15:31:09.170 回答