SQL Oracle查询 - 字段包含特殊字符或字母

3

需要查看税号字段是否包含字母或任何特殊字符:*,!,?,@,#,$,&,+,(),/

我该如何编写此SQL语句?


定义“或”。你的意思是显示所有包含至少一个字母或至少一个特殊字符的taxid字段吗?这很奇怪;相反,我认为你可以更仔细地阐述你的问题。 - user5683823
嗨,我正在尝试验证税号字段仅包含数字,没有其他内容。从各种来源提取数据时,没有对税号输入进行验证检查,因此我正在检查数据质量。 - Cheryl L Hubert
2个回答

4

Oracle有regexp_like函数:

select * from tablename where regexp_like(columnname, '[*!?@#$&+()/]');

以上已经包含了所有的特殊字符,我只需要添加字母以涵盖所有字母吗?谢谢! - Cheryl L Hubert
@CherylLHubert - 有比枚举所有字母、数字、标点符号等更紧凑的方法来检查它们的存在或不存在,即使你使用 regexp_like。然而,在这个问题中,你根本不需要使用正则表达式。尽可能选择使用标准字符串函数(即非正则表达式函数)的解决方案,因为正则表达式要慢得多——这是我们为了它们更大的灵活性所付出的代价。 - user5683823

0

这里是显示所有不完全由数字组成的taxid的最佳方法:

select taxid
from   your_table
where  translate(taxid, '.0123456789', '.') is not null

TRANSLATE 将输入中的每个句点替换为输出中的句点,从而“翻译”(替换)它们。由于第二个参数中的其他字符在第三个参数中没有对应的字符,因此它们将被简单地删除。如果此操作的结果不是null,则taxid包含至少一个不是数字的字符。如果taxid全是数字,则操作的结果为null。请注意,这里使用的句点字符是必需的,因为 Oracle 对TRANSLATE的定义存在一些奇怪之处:如果其任何参数为null,则其返回值也为null。虽然这听起来不太合理,但我们必须按照 Oracle 定义的函数进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接