Mysql 选择奇数且不包含特殊字符
这是表WWE:Mysql 选择奇数且不包含特殊字符,mysql,sql,Mysql,Sql,这是表WWE: |**Col A** | **Col B** | -+-----------+-----------+- | Hello | 9%15A | | World | 2*10 | | Cat | 12 | | Dog | 13 | colb是Varchar(100) 如何选择仅由奇数组成且不包含“%”或“*”或字母的所
|**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]$”
,但要允许使用单位数数字。