Sql 筛选不包含数字的记录
我有一个以字符串格式显示数字的表。理想情况下,表应该包含字符串格式的10位数字,但它有许多垃圾值。我想过滤掉那些本质上不理想的记录 下面是我的示例表:Sql 筛选不包含数字的记录,sql,hiveql,Sql,Hiveql,我有一个以字符串格式显示数字的表。理想情况下,表应该包含字符串格式的10位数字,但它有许多垃圾值。我想过滤掉那些本质上不理想的记录 下面是我的示例表: +---------------+--------+----------------------------------+ | ID_UID | Length | ##Comment | +---------------+--------+------------------------
+---------------+--------+----------------------------------+
| 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]%'
但这不会返回任何记录
已经为相同的项目创建了一个
另外,列的长度和注释本质上是说明性的。您希望RLIKE不喜欢:
请注意,%是一个LIKE通配符,而不是正则表达式通配符。此外,正则表达式与模式匹配,因此字符串的开头和结尾不需要通配符
如果要查找非十位数的值,请明确:
SELECT *
FROM t1
WHERE ID_UID NOT RLIKE '^[0-9]{10}$'
我还想确保长度为10个字符。在上面的查询中,我也排除了原始表中的第7条记录所有数字,但长度为11。另外,当我尝试从t1中选择*时,其中ID像“[0-9]”。我正在获取所有记录,而我只希望记录具有所有数字。考虑到我已经删除了^标志。
SELECT *
FROM t1
WHERE ID_UID NOT RLIKE '^[0-9]{10}$'