我有一个表name_data。它通过自动化过程获取数据。 我要检查的是 - 该表中是否有任何垃圾值。 请考虑以下情况:
select name_id, name_elem3, name_elem4 from name_data where name_id='200012884';
This query gives this result:
Name_id name_elem3 name_elem4
200012884 GENEVI�VE MARRTIN
现在在上面的结果中。该数据具有垃圾值“GENEVI�VE” 我想要一个查询或脚本,可以检查表中的垃圾值
答案 0 :(得分:0)
定义垃圾。如果您正在寻找Oracle视为非alnum的特殊字符(此处为'¿'和'½'),您可以使用此字符:
select *
from mytable
where regexp_like(name_elem3,'[^[:alnum:]]')
or regexp_like(name_elem4,'[^[:alnum:]]');
根据您的需要更改模式。
另一种选择是使用TRANSLATE删除所有需要的字符并检查是否还有其他字符:
select *
from mytable
where length(translate(name_elem3, '¿ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', '¿')) > 0
or length(translate(name_elem4, '¿ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', '¿')) > 0;
(你需要'¿'或任何其他特殊字符与TRANSLATE在这里,因为Oracle的奇怪“空字符串为空”的东西,其中第二个字符串文字将为空,因此为null,因此“未知”,这样TRANSLATE也会导致“unknown”= NULL。)