2016-03-10 176 views
0

我需要您的协助以下查询,因为我不知道如何修改以显示正确的结果。 列2具有与开头的记录:Oracle不喜欢

005.... 
04.... 
01.... 
05.... 
XYZ.... 
234.... 
6789.... 
V875.... 

我想修改查询,以排除与例如04,01,05单个零(从上面的例子)开头的记录,其余的都还好。我试过不喜欢'0%',但它排除了从零开始的记录。我怎样才能做到这一点?以下是我拥有的查询示例。

Select * from table1 
where column 1 in (‘A’,’B’,’C’) and column2 ???? 
+0

让我们来澄清一下:'04','01'是不需要的;应包括“0X”。正确?最后一句话不清楚。 – Alfabravo

+0

嗨 - 好问题,任何以单个零(0x)开头的内容都不应包括在内。非常感谢。 – netraider

+0

非常感谢你的帮助。 – netraider

回答

1

使用正则表达式来排除与一个零开头的记录:

WHERE NOT Regexp_like(column, '^0[^0]'); 
2

为此,您可以只用like

where col not like '0%' or col like '00%' 
0

嘿只是一个是否改变你不愿意在这里使用REGEXP。我们 可以使用一些OLD学校的方法来做到这一点。希望能帮助到你。

SELECT B.NMM 
FROM 
    (SELECT a.nmm, 
    CASE 
     WHEN SUBSTR(a.nmm,1,1) = '0' 
     THEN NULLIF(SUBSTR(a.nmm,1,1), SUBSTR(a.nmm,2,1)) 
     ELSE NULL 
    END chk 
    FROM 
    (SELECT '005' NMM FROM DUAL 
    UNION ALL 
    SELECT '04' NMM FROM DUAL 
    UNION ALL 
    SELECT '01' NMM FROM DUAL 
    UNION ALL 
    SELECT '05' NMM FROM DUAL 
    UNION ALL 
    SELECT 'XYZ' NMM FROM DUAL 
    UNION ALL 
    SELECT '234' NMM FROM DUAL 
    UNION ALL 
    SELECT 'V875' NMM FROM DUAL 
    )A 
)b 
WHERE B.chk IS NULL; 

-----------------------------------OUTPUT----------------------------------- 

NMM 
005 
XYZ 
234 
V875 
----------------------------------------------------------------------------- 
0

另一种简单的

Where substr(colmn, 1,1)='0' 

但这approciate否认柱使用insex的。如果这不是问题,应该运作良好