2013-05-16 45 views
1

我想運行一個查詢來選擇表中的列中的值,該列中的列中的數據中沒有特定位置的空間。即前兩個位置。oracle sql查詢來獲取沒有空格的列值

Select test_col from A where SUBSTR(test_col, 0 ,2) <> ' ' 

到目前爲止,它是在開始的兩個位置返回有空格的列。

任何建議。

例子:

test_col 
    Quick Brown Fox 
Black Sheep 
    This a test 
Mary had a little lamb 

所以查詢應該返回黑羊瑪麗有隻小羊羔

+0

您需要詳細說明。你能否展示一些示例數據以及輸出結果如何? –

+0

好的更新與示例。 – Nomad

+1

設置[sqlfiddle](http://sqlfiddle.com/)也總是有幫助。 –

回答

1

Oracle 10g及更高版本:

SELECT test_col FROM a WHERE REGEXP_LIKE(test_col, '^[^ ]{2}.*$'); 

這裏的SQL Fiddle

+0

由於它給出了無效的關係運算符錯誤ora-00920 – Nomad

+0

對不起。應該測試過了。給我幾個,我會解決它。 –

+0

拼寫錯誤的功能。它現在有效。請參閱SQL小提琴鏈接。 –

1
select test_col 
    from A 
where SUBSTR(test_col, 1, 1) <> ' ' 
    and SUBSTR(test_col, 2, 1) <> ' '; 

OR(甚至更好)

select test_col 
    from A 
where INSTR(SUBSTR(test_col, 1, 2), ' ') = 0; 
+0

感謝您的回答。 – Nomad

1

一個字符串的第一個位置指數是1,而不是0(雖然SUBSTR() treats it as 1),你只是在測試的一個空間:

select test_col from A where SUBSTR(test_col, 1, 2) <> ' ' 
+0

我試過之前用索引(1,2)它返回在這兩個位置有空間的數據。 – Nomad

+0

您正在通過@Nomad檢查_one_空間,而不是_two_。 – Ben

+0

你是對的,謝謝。但同樣的結果,如果我改變指數爲1,3而不是1,2等 – Nomad

4

您的索引應該從1開始,而不是0,我更喜歡修剪並檢查數據空間檢查是否爲空。試試這個

Select test_col from A where Trim(SUBSTR(test_col, 1 ,2)) IS NOT NULL 
+0

感謝您的回答。 – Nomad