如何在MySQL中选择不是数字的行?
SELECT *
FROM `TABLE`
WHERE `Column_B` <> Number
我知道,这是一个愚蠢的问题,但我还没有找到解决方案。 Column_B是varchar(3)。
答案 0 :(得分:2)
试试这个sqlfiddle ..
http://sqlfiddle.com/#!2/17f28/1
SELECT * FROM Table1 WHERE col NOT REGEXP '^[0-9]+$'
如果你想匹配real numbers
(floats
)而不是整数,你需要处理上面的情况,以及你的模式在0和1(即0.25)之间的情况,以及如果您的模式的小数部分为0(即2.0)。在我们处理它的同时,我们将在整数上添加对前导零的支持(即005):
^0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*$
sql看起来像SELECT * FROM Table1 WHERE col NOT REGEXP '^0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*$'
答案 1 :(得分:0)
这是使用mysql regexp运算符(fiddle)执行此操作的一种方法:
SELECT * FROM `TABLE`
WHERE `Column_B` NOT REGEXP '^-?[0-9]*\\.?[0-9]+([Ee][+-][0-9]+)?$';
支持有符号/无符号整数,小数和科学记数法。
注意:建议避免对实体名称使用sql关键字,即使用反引号引用它们也是如此。
答案 2 :(得分:-1)
这也适合你
SELECT col FROM Table1
WHERE col NOT IN ( SELECT col FROM Table1
where CAST(col as DECIMAL(10,5)) !=0
or Col = '0' )