|
综合NB哥和OO哥的思路:
WITH n AS (
SELECT REPLACE(SYS_CONNECT_BY_PATH(n,','),',') s,LEVEL lvl
FROM (SELECT ROWNUM-1 n FROM DUAL CONNECT BY ROWNUM<=10)
START WITH MOD(n,2)=1
CONNECT BY LEVEL<=3
)
,t AS (
SELECT s||rn||REVERSE(s) s FROM n,(SELECT ROWNUM-1 rn FROM DUAL CONNECT BY ROWNUM<=10) WHERE n.lvl<3
UNION ALL
SELECT s||REVERSE(s) FROM n
UNION ALL
SELECT TO_CHAR(ROWNUM) FROM DUAL CONNECT BY ROWNUM<10
)
SELECT s, b
FROM (
SELECT s,
LTRIM(TRIM(REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(TO_CHAR(s,'XXXXXX'),'0','0000')
,'1','0001')
,'2','0010')
,'3','0011')
,'4','0100')
,'5','0101')
,'6','0110')
,'7','0111')
,'8','1000')
,'9','1001')
,'A','1010')
,'B','1011')
,'C','1100')
,'D','1101')
,'E','1110')
,'F','1111')
),'0') b
FROM t
)
WHERE b = REVERSE(b);
S B
15351 11101111110111
313 100111001
32223 111110111011111
39993 1001110000111001
585 1001001001
53235 1100111111110011
53835 1101001001001011
717 1011001101
73737 10010000000001001
33 100001
585585 10001110111101110001
7447 1110100010111
99 1100011
9009 10001100110001
1 1
3 11
5 101
7 111
9 1001
19 rows selected.
Elapsed: 00:00:00.07 |
|