筛选不包含数字的记录

问题描述

我有一个表,该表具有字符串格式的数字。理想情况下,该表应包含字符串格式的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]%'

但这不会返回任何记录。

已经为此创建了一个fiddle

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}$'