2017-03-29 30 views
3

这是表WWE选择奇数,并且不包含特殊字符

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

Col BVarchar (100)

如何选择所有的行仅由奇数的和不包含“%”或'*'或字母表?

我知道怎么去奇数:colB % 2 <> 0

但我不知道如何排除特殊字符和计算AS号,因为它们存储在VARCHAR

例如,在该表中,输出将是

| Dog | 13 | 

回答

1

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

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

它仍然有特殊字符输出数据和字母 – user6308605

+0

输出没有变化 – user6308605

+0

为奇数检查添加一个括号并尝试。 –

1

或者使用ISNUMERIC函数

SELECT * FROM WWE WHERE ISNUMERIC(colB) = 1 AND colB % 2 <> 0 
+0

mysql中ISNUMERIC的等价物是什么? – user6308605

+0

没有注意到它是用于MySQL,我想你将不得不使用正则表达式。 – Kevin

+0

这很好:)谢谢! – user6308605

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

+0

什么是13579? – user6308605

+1

这是一种保证它是一个奇数的方法,奇数以奇数结尾 –

+0

好的,可以理解的。它可以用于这样的数字235 – user6308605