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サーバーではこれを行うことができます

;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私は、条項のcaseステートメントが不快であることを認めます。ただし、エラーを防ぐには、操作の順序付けが重要であるため、代替手段はほとんどありません。

于 2012-10-02T15:31:09.170 に答える