2016-10-30 20 views
0

我在我的表中的列其中包含汽車牌照號碼(這是不以任何方式在源數據驗證)。檢查前兩個字符是A-Z字母

對於牌照號碼是有效的,前兩個字符必須是大寫字母(A-Z)。

我試着添加以下WHERE子句:

AND REGEXP_LIKE(SUBSTR(auto.license, 1, 2), '[A-Z]') 

...但是我還是在輸出數據集中無效組合。

任何幫助?

回答

3

你的模式

AND REGEXP_LIKE(SUBSTR(auto.license, 1, 2), '[A-Z]') 

只檢查是否存在一個A-Z的前兩個字符,而不是兩者都是。

你並不需要額外的子步驟中,你可以這樣做:

AND REGEXP_LIKE(auto.license, '^[A-Z]{2}') 

插入符號^錨字符串的開始,而{2}先前的模式匹配的兩倍。如果你想匹配的語言(?或字符集)英語以外的大寫字符,其中有大寫不同的範圍,不只是覆蓋ASCII範圍AZ,你可以使用:

AND REGEXP_LIKE(auto.license, '^[[:upper:]]{2}') 

Read more about Oracle's regular expression support,和multilingual support

+0

我做了一些測試http://rextester.com/AGKQ80549,但這裏的查詢返回'Ab',你知道爲什麼嗎? 「[A-Z] {2}」和「[A-Z] [A-Z]」之間是否有區別? –

+0

看起來正確的答案應該是''^ [[:upper:]] {2}')',怪異的部分是'[a-z]'作爲不區分大小寫的工作。 http://rextester.com/VLULS42459 –

+1

@JuanCarlosOropeza - 我提到使用':upper:'爲其他(不包括英文,我沒有指定!)語言。該網站默認爲德語。請參閱http://rextester.com/IZF22733。 (另外,沒有,'[A-Z] {2}'和'[A-Z] [A-Z]'之間沒有真正的區別,只是避免了重複模式 - 當然, –

2

什麼

AND REGEXP_LIKE(SUBSTR(auto.license, 1, 2), '[A-Z][A-Z]') 
相關問題