Mysql 选择奇数且不包含特殊字符

Mysql 选择奇数且不包含特殊字符,mysql,sql,Mysql,Sql,这是表WWE: |**Col A** | **Col B** | -+-----------+-----------+- | Hello | 9%15A | | World | 2*10 | | Cat | 12 | | Dog | 13 | colb是Varchar(100) 如何选择仅由奇数组成且不包含“%”或“*”或字母的所

这是表WWE:

    |**Col A**  | **Col B** |
   -+-----------+-----------+-    
    | Hello     | 9%15A     |    
    | World     | 2*10      |    
    | Cat       | 12        |    
    | Dog       | 13        |
colb
Varchar(100)

如何选择仅由奇数组成且不包含“%”或“*”或字母的所有行

我知道如何获得奇数:
colB%2 0

但我不知道如何排除特殊字符并将数字计算为数字,因为它们存储在VARCHAR中

例如,在本表中,输出为

| Dog | 13 |

如果只需要数字结果,请使用
REGEXP

SELECT * FROM WWE WHERE colB REGEXP '[0-9]' AND colB mod 2 = 1

或者使用ISNUMERIC函数

SELECT * FROM WWE WHERE ISNUMERIC(colB) = 1 AND colB % 2 <> 0
从WWE中选择*,其中ISNUMERIC(colB)=1和colB%2 0

您可以用一个正则表达式检查这两个条件:

SELECT * FROM WWE WHERE colB REGEXP '^[[:digit:]]*[13579]$';
可以理解为:

以数字开头,后跟任意数量的数字,以这些字符中的任意一个(1,3,5,7)结尾

对于此示例数据

    |**Col A**  | **Col B** |
   -+-----------+-----------+-    
    | Hello     | 9%15A     |    
    | World     | 2*10      |    
    | Cat       | 12        |    
    | Dog       | 13        |
返回

    |**Col A**  | **Col B** |
   -+-----------+-----------+-      
    | Dog       | 13        |

由于@Thorsten Kettner

的更新,可以解释单个数字,mysql中ISNUMERIC的等价物是什么?没有注意到它是mysql的,我想你必须使用正则表达式。很好:)谢谢!它仍然输出带有特殊字符和字母的数据。添加一个括号用于奇数检查,然后尝试使用mod而不是%输出相同的hmmtry。哪一部分不适合你?得到奇数还是数字结果?我使用的是MySQL服务器版本:5.5,在这里运行良好。你用的是什么版本?13579是做什么用的?这是一种保证它是奇数的方法,奇数以奇数结尾,这是可以理解的。它可以用于像这样的数字吗235它应该是
“^[:digit:]*[13579]$”
,但要允许使用单位数数字。