2011-01-07 10 views
4

結果に値「15.2」、「UNK」、「1.4」がある場合、「1.4」の行だけを選択するにはどうすればよいですか?SQL: "..."結果が "15.2"、 "UNK"、 "1.4"の場合は "WHERE result <4.0"?

SELECT * FROM tbl WHERE result<4.0 

選択したい場合は(理想的には両方のMSSQLとMySQLのために働く何か...)

ここでは、 '結果' 列

CREATE TABLE IF NOT EXISTS `tbl` (
    `result` varchar(5) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

INSERT INTO `tbl` (`result`) VALUES ('15.2'),('UNK'),('1.4'); 
+0

15.2は、4.0未満ではありません? – marcog

答えて

1
select * 
    from tbl 
    where 1 = case ISNUMERIC(result + 'e0') 
        when 1 then case when CAST(result as float) < 4.0 
            then 1 
            else 0 
           end 
        when 0 then 0 
       end 
+0

は実際にはどんな文字列でもかまいません – ajo

+0

@ajo:MSSQLで動作するバージョンで私の答えを修正しました。 MySQLにはISNUMERICが組み込まれていません。 –

+0

@Joe isnumeric(result + 'e0')ではなく、数値(result)ですか? – ajo

0

@ajo、あります結果が「15.2」、「UNK」、「1.4」の場合は「1.4」の行のみが使用されます。

SELECT * FROM tblのような結果 '1.4'

+0

彼は 'result <4.0'の数値比較を行いたい –

0

この機能はありますか?

SELECT * FROM table WHERE ISNUMERIC(result) = 1 AND result < 4; 
0

これは、SQL Serverのために働く:

SELECT * 
    FROM tbl 
WHERE CAST(NULLIF(result, 'UNK') AS DECIMAL(9, 4)) < 4.0; 
関連する問題