SQL:“......如果'结果'是:”15.2“,”UNK“,”1.4“,那么结果< 4.0”?

时间:2011-01-07 14:36:21

标签: sql casting

如果结果的值为“15.2”,“UNK”,“1.4”,如何选择只有“1.4”的行?

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');

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

@ajo,如果你想只选择带有“1.4”的行,如果结果的值为“15.2”,“UNK”,“1.4”,那么使用Like?

SELECT * FROM tbl WHERE结果类似于'1.4'

答案 2 :(得分:0)

这对你有用吗?

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

答案 3 :(得分:0)

这适用于SQL Server:

SELECT *
  FROM tbl 
 WHERE CAST(NULLIF(result, 'UNK') AS DECIMAL(9, 4)) < 4.0;