これは私の最初の投稿であり、正しく質問しない場合はお詫び申し上げます。
結果の列は次のようになります
結果_
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サーバーではこれを行うことができます
;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
私は、条項のcaseステートメントが不快であることを認めます。ただし、エラーを防ぐには、操作の順序付けが重要であるため、代替手段はほとんどありません。