我有一个表,其中包含字符串格式的数字。理想情况下,该表应该包含字符串格式的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。
附注:列length和##Comment本质上是说明性的。
发布于 2020-10-22 01:41:19
你想要RLIKE而不是LIKE
SELECT *
FROM t1
WHERE ID_UID RLIKE '[^0-9]'请注意,%是LIKE通配符,而不是正则表达式通配符。此外,正则表达式与出现模式的任何位置都匹配,因此字符串的开头和结尾不需要通配符。
如果您希望查找不是十位数的值,请明确表示:
SELECT *
FROM t1
WHERE ID_UID NOT RLIKE '^[0-9]{10}$'https://stackoverflow.com/questions/64468889
复制相似问题