Mysql 比较数值和字符串值的混合列

Mysql 比较数值和字符串值的混合列,mysql,comparison,sql-update,Mysql,Comparison,Sql Update,嗨,我正在尝试根据另一列中的值执行一个简单的更新查询,例如 UPDATE tbl1 SET col2=1 WHERE col1 < 10 更新tbl1集合col2=1,其中col1

嗨,我正在尝试根据另一列中的值执行一个简单的更新查询,例如

UPDATE tbl1 SET col2=1 WHERE col1 < 10
更新tbl1集合col2=1,其中col1<10
其中col1包含以下值:

1,2,3…19,20,N1,N2…N9

但是,当查询遇到一个包含非数字字符的值时,它就会爆炸。我试过:

UPDATE tbl1 SET col2=1 WHERE CAST(col1 AS UNSIGNED INT) < 10
更新tbl1集合col2=1,其中强制转换(col1作为无符号INT)<10
这也不奇怪,但我认为在第一个示例中,当检查N1<10时,它会忽略该行,而不是失败

我怎样才能做到这一点?

您可以使用dirty
REPLACE()

其中CAST(替换(替换(替换(col1,'M','','F','','N','','L','')为无符号)<10

在这个过程中,查询的性能不是很好,但是可以满足您的需要。

前缀
N
是常量吗?下面是如何检查MySql中的内容是否是数字的:我尝试了一个类似您的
更新
查询,当遇到
N1
时,它没有爆炸,只是更新了那一行。当将字符串转换为数字时,如果它不是以数字开头,它将转换为0,小于10。@Barmar Hmmm我得到了#1292-截断的不正确整数值:“F3”,在我给出的第二个示例中…?是的,我读过这个错误,但我自己从未得到过。
WHERE CAST(REPLACE(REPLACE(REPLACE(REPLACE(col1, 'M', ''), 'F', ''), 'N', ''), 'L', '') AS UNSIGNED) < 10