2013-05-16 36 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