这是表WWE
:
|**Col A** | **Col B** |
-+-----------+-----------+-
| Hello | 9%15A |
| World | 2*10 |
| Cat | 12 |
| Dog | 13 |
Col B
是Varchar (100)
如何选择仅由ODD NUMBERS组成的所有行,并且不包含'%'或' *'或字母??
我知道如何获得ODD NUMBERS:colB % 2 <> 0
但我不知道如何排除特殊字符并将数字计算为NUMBER,因为它们存储在VARCHAR中
例如,在此表中,输出将为
| Dog | 13 |
答案 0 :(得分:3)
您可以使用单个正则表达式检查两个条件:
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 已更新以计入个位数
答案 1 :(得分:1)
USE REGEXP
如果您只需要数字结果:
SELECT * FROM WWE WHERE colB REGEXP '[0-9]' AND colB mod 2 = 1
答案 2 :(得分:1)
或使用ISNUMERIC功能
SELECT * FROM WWE WHERE ISNUMERIC(colB) = 1 AND colB % 2 <> 0