问题描述
我有一个表,该表具有字符串格式的数字。理想情况下,该表应包含字符串格式的10位数字,但它具有许多垃圾值。我想过滤掉本质上不理想的记录。
下面是我的示例表:
+---------------+--------+----------------------------------+
| ID_UID | Length | ##Comment |
+---------------+--------+----------------------------------+
| +112323456705 | 13 | Contains special character |
| 4323456432 | 11 | Contains blank |
| 3423122334 | 10 | As expected,10 character number |
| 6758439239 | 10 | As expected,10 character number |
| 58_4323129 | 10 | Contains special character |
| 4567$%6790 | 10 | Contains special character |
| 45684938901 | 11 | Is 11 characters |
| 4568 38901 | 10 | Contains blank |
+---------------+--------+----------------------------------+
预期输出:
+---------------+--------+----------------------------+
| ID_UID | Length | ##Comment |
+---------------+--------+----------------------------+
| +112323456705 | 13 | Contains special character |
| 4323456432 | 11 | Contains blank |
| 58_4323129 | 10 | Contains special character |
| 4567$%6790 | 10 | Contains special character |
| 45684938901 | 11 | Is 11 characters |
| 4568 38901 | 10 | Contains blank |
+---------------+--------+----------------------------+
基本上,我希望所有没有10位数字的记录。
我已经尝试过以下查询:
SELECT *
FROM t1
WHERE ID_UID LIKE '%[^0-9]%'
但这不会返回任何记录。
P.S。列长度和## Comment本质上是说明性的。
解决方法
您想要RLIKE
而不是LIKE
:
SELECT *
FROM t1
WHERE ID_UID RLIKE '[^0-9]'
请注意,%
是LIKE
通配符,而不是正则表达式通配符。另外,正则表达式在任何出现位置都与模式匹配,因此在字符串的开头和结尾都不需要通配符。
如果要查找不是十位数的值,请明确:
SELECT *
FROM t1
WHERE ID_UID NOT RLIKE '^[0-9]{10}$'