先贴出来这样一段代码
这段话的功能无非是找到开头四位为2009的最大序号,然后加1的一个查询,其中后面也为四位,其中用到了decode函数。
但是岂不知orcale本身有专门负责填充位的lpad函数,和专门负责判断null的nvl函数,又何必写的这么复杂,让人一下子难以理解呢?
这样不是很好嘛:
SELECT decode(length(substr(max(to_number(CGBH)), 5) + 1),
null,
null,
1,
1998 || '000' ||
(substr(max(to_number(CGBH)), 5) + 1),
2,
1998 || '00' ||
(substr(max(to_number(CGBH)), 5) + 1),
3,
1998 || '0' || (substr(max(to_number(CGBH)), 5) + 1),
1998 || substr(max(to_number(CGBH)), 5) + 1) CGBH
FROM LWZZ
WHERE CGBH LIKE '1998%'
UNION
SELECT to_char('1998' || '0000' + 1) cgbh
FROM LWZZ
WHERE (SELECT max(CGBH)
FROM LWZZ
WHERE CGBH LIKE '1998%') is null
这段话的功能无非是找到开头四位为2009的最大序号,然后加1的一个查询,其中后面也为四位,其中用到了decode函数。
但是岂不知orcale本身有专门负责填充位的lpad函数,和专门负责判断null的nvl函数,又何必写的这么复杂,让人一下子难以理解呢?
这样不是很好嘛:
select lpad (nvl(substr(max(to_number(CGBH)), 5), '0') + 1, 4, '0')
from lwzz
WHERE CGBH LIKE '1998%'