日期:2014-05-16 浏览次数:21537 次
CREATE TABLE test_col (col_name VARCHAR2(100)); INSERT INTO TEST_COL (COL_NAME) VALUES ('爱特优科新信息技术(北京)有限公司'); INSERT INTO TEST_COL (COL_NAME) VALUES ('爱特优科信息技术(北京)有限公司'); INSERT INTO TEST_COL (COL_NAME) VALUES ('安那络器件(中国)有限公司'); INSERT INTO TEST_COL (COL_NAME) VALUES ('安那络器件(中国)有限公司'); INSERT INTO TEST_COL (COL_NAME) VALUES ('百润时代网络技术(北京)有限公司'); INSERT INTO TEST_COL (COL_NAME) VALUES ('百润时代网络技术有限公司'); INSERT INTO TEST_COL (COL_NAME) VALUES ('北京艾克赛利科技有限公司'); INSERT INTO TEST_COL (COL_NAME) VALUES ('北京艾克赛利微电子技术有限公司'); INSERT INTO TEST_COL (COL_NAME) VALUES ('百度集团'); INSERT INTO TEST_COL (COL_NAME) VALUES ('新浪集团'); 我要实现的结果如下: 1 爱特优科新信息技术(北京)有限公司 2 爱特优科信息技术(北京)有限公司 3 安那络器件(中国)有限公司 4 安那络器件(中国)有限公司 5 百润时代网络技术(北京)有限公司 6 百润时代网络技术有限公司 7 北京艾克赛利科技有限公司 8 北京艾克赛利微电子技术有限公司 最好是挨着的,把相近的显示查询出来
SQL> select * from test_col; COL_NAME -------------------------------------------- 1 2 22 33 1 中国 日本 米国 韓国 9 rows selected SELECT n.col_name FROM (SELECT m.col_name, m.keyword, COUNT(*) OVER(PARTITION BY m.rid, m.keyword) cnt1, COUNT(*) OVER(PARTITION BY m.keyword) cnt2 FROM (SELECT t1.ROWID rid, t1.col_name, SUBSTR(t1.col_name, t2.rn, 1) keyword FROM test_col t1, (SELECT ROWNUM rn, max_len FROM (SELECT MAX(LENGTH(col_name)) max_len FROM test_col) CONNECT BY ROWNUM <= max_len) t2 WHERE LENGTH(t1.col_name) >= rn) m) n WHERE n.cnt1 <> n.cnt2 COL_NAME -------------------------------------------- 1 1 2 22 22 中国 米国 韓国 8 rows selected
------解决方案--------------------
这个想法比较有创意,实用性也比较高!
------解决方案--------------------