SQL查询仅包含特定字符的值

时间:2018-05-11 20:25:56

标签: sql oracle oracle-sqldeveloper

如何查询仅包含特定字符的值,无论长度如何?

我有一张表格如下:

CustID  MAC_Addr
001     AV4A46299992
002     99999
003     A8JEO943K8
004     999999999999
005     A99K0O37DG49
006     999
007     9

我正在试图找出一个只会返回CustID 002,004,006和007的查询,因为它们的MAC_Addr只包含9个 - 而且无论长度如何都没有其他内容;但是要确保我不会拉入其他连续9的(如CustID 001)。

相对新手在这里,所以可能是一些简单的我不知道,只是没有太多的运气。谢谢!

3 个答案:

答案 0 :(得分:3)

以下几乎适用于任何SQL方言:

select t.*
from t
where replace(mac_addr, left(mac_addr, 1), '') = '';

编辑:

如果您只关心'9',那么您可以使用:

select t.*
from t
where replace(mac_addr, '9', '') = '';

编辑II:

好的,Oracle不支持LEFT(),因此对SUBSTR()做同样的事情:

select t.*
from t
where replace(mac_addr, substr(mac_addr, 1, 1), '') = '';

答案 1 :(得分:0)

从table_name选择CustID,MAC_Addr其中MOD(MAC_Addr,9)= 0;

修改

选择CustID,MAC_Addr来自table_name其中REGEXP_LIKE(MAC_Addr,'^ [[:digit:]] + $')和MOD(MAC_Addr,9)= 0;

修改:2 选择CustID,MAC_Addr来自table_name其中REGEXP_LIKE(MAC_Addr,'^ [[:digit:]] + $')和MAC_Addr> 0和MOD(MAC_Addr,9)= 0;

答案 2 :(得分:0)

另一个Oracle变体:

SELECT *
  FROM t
  WHERE TRIM('9' FROM MAC_Addr) IS NOT NULL

如果可能有空格,可能需要做更多的修剪。见https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions199.htm