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

时间:2017-03-29 07:36:39

标签: mysql sql

这是表WWE

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

Col BVarchar (100)

如何选择仅由ODD NUMBERS组成的所有行,并且不包含'%'或' *'或字母??

我知道如何获得ODD NUMBERS:colB % 2 <> 0

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

例如,在此表中,输出将为

| Dog | 13 |

3 个答案:

答案 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