在itpub看到一贴子,要求取出表中某个列上所有位置相同数值的记录。如
表 num_test中,有以下记录:
insert into num_test values('11111');
insert into num_test values('2222');
insert into num_test values('33333');
insert into num_test values('11411');
insert into num_test values('16711');
insert into num_test values('18231');
insert into num_test values('666');
commit;
要取出11111,2222,33333,666这几行记录。收集了下贴中几种巧秒的方法,如下:
测试数据初始化如下:
-
SQL> create table num_test(
-
2 num_name number
-
3 );
-
-
表已创建。
-
-
SQL> insert into num_test values(\'11111\');
-
-
已创建 1 行。
-
-
SQL> insert into num_test values(\'2222\');
-
-
已创建 1 行。
-
-
SQL> insert into num_test values(\'33333\');
-
-
已创建 1 行。
-
-
SQL> insert into num_test values(\'11411\');
-
-
已创建 1 行。
-
-
SQL> insert into num_test values(\'16711\');
-
-
已创建 1 行。
-
-
SQL> insert into num_test values(\'18231\');
-
-
已创建 1 行。
-
-
SQL> insert into num_test values(\'666\');
-
-
已创建 1 行。
-
-
SQL> commit;
-
-
提交完成。
-
-
SQL> select * from num_test;
-
-
NUM_NAME
-
----------
-
11111
-
2222
-
33333
-
11411
-
16711
-
18231
-
666
-
-
已选择7行。
方法一:
-
SQL> select * from num_test where replace(num_name,substr(num_name,1,1),\'\') is null;
-
-
NUM_NAME
-
----------
-
11111
-
2222
-
33333
-
666
方法二:
-
SQL> select * from num_test where mod(num_name,lpad(\'1\',length(num_name),\'1\'))=0;
-
-
NUM_NAME
-
----------
-
11111
-
2222
-
33333
-
666
方法三:
-
SQL> select * from num_test where regexp_replace(num_name,\'(.)\\1+\') is null;
-
-
NUM_NAME
-
----------
-
11111
-
2222
-
33333
-
666
方法四:
-
SQL> select * from num_test where lpad(substr(num_name,1,1),length(num_name),substr(num_name,1,1))=num_name;
-
-
NUM_NAME
-
----------
-
11111
-
2222
-
33333
-
666
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21251711/viewspace-1270048/
,如需转载,请注明出处,否则将追究法律责任。