如何查询仅包含特定字符的值,无论长度如何?
我有一张表格如下:
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)。
相对新手在这里,所以可能是一些简单的我不知道,只是没有太多的运气。谢谢!
答案 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