2015-05-07 43 views
0

我有點迷失在一個應該很微不足道的問題中。我檢查了相關的問題,導致檢查正則表達式擬合,他們這樣做。我有一個4字符長的varchar2,它不希望將它轉換爲數字。這個Oracle to_number函數不應該工作嗎?

我檢查了這一點:

select 
    nyszamtxt 
    from gyta_megjegyzes 
    where REGEXP_LIKE (nyszamtxt, '[0-9][0-9][0-9][0-9]'); 

它給回VARCHAR2形式的預期數字,沒有別的。

好那麼這應該正常工作,我想:

select 
    to_number(nyszamtxt) 
    from gyta_megjegyzes 
    where REGEXP_LIKE (nyszamtxt, '[0-9][0-9][0-9][0-9]'); 

沒有,它說:ORA 01722. 00000 - 「無效號碼」

我缺少的東西真是小巫見大巫?我不知道有什麼問題。

+0

只是空值,但它不應該在選擇因爲regexp_like – CsBalazsHungary

+0

你的第一個查詢給output.its給予null值 – user2001117

+0

@ user2001117我更新了我的問題 – CsBalazsHungary

回答

3

在一般情況下,Oracle不會去除非數字字符,如abc1234xyz。你可能想要做的其中之一:

  • 哈登你的表達:

    where REGEXP_LIKE (nyszamtxt, '^[0-9][0-9][0-9][0-9]$'); 
    
  • 地帶字符自己:

    select 
    to_number(REGEXP_REPLACE(nyszamtxt, '[^0-9]+', '')) 
    from gyta_megjegyzes 
    where REGEXP_LIKE (nyszamtxt, '[0-9][0-9][0-9][0-9]'); 
    
+0

它的工作原理,但我不明白爲什麼,所有的varchar2s就像'1256'我沒有看到任何需要剝離。 – CsBalazsHungary

+0

奇怪。無論哪種方式,您的查詢將更安全地去除非數字字符,如答案中。你完全確定你的原始查詢沒有返回任何非數字字符嗎? – Drumbeg

+0

非常感謝!我原來的更新也在工作,我仍然很好奇,爲什麼oracle需要去掉varchar2字段,當它顯然只有4位數字時沒有任何垃圾。當選項可用時,我會將您的答案標記爲正確。 – CsBalazsHungary

相關問題