我在ORACLE数据库中有一个表mytable
,它只有一个列Roll_no
,如下所示:
Roll_no
----------
CD01 0001
CD01 0002
CD01 0004
CD01 0005
CD01 0008
此处
CD01
是固定的,在CD01
之后存在一个空格,然后将数字写入0001
及之后。请在这里看到
CD01 0003
,CD01 0006
和CD01 0007
丢失了,这些是我的必需输出。要求的输出:
Roll_no
----------
CD01 0003
CD01 0006
CD01 0007
如何编写SQL查询来查找这些丢失的字母数字字符?有什么想法吗
最佳答案
您可以生成数字的完整列表,然后使用NOT EXISTS(或NOT IN)过滤掉现有记录。例如:
SELECT new_roll_no
FROM (SELECT 'CD01 ' || to_char(rownum, 'fm0000') new_roll_no FROM dual
CONNECT BY LEVEL <= (SELECT to_number(MAX(substr(roll_no, 6))) FROM T))
WHERE new_roll_no NOT IN (SELECT roll_no FROM T)
ORDER BY 1
运作方式如下: