加号登录SQL的select子句

时间:2019-05-29 15:23:02

标签: sql oracle

我正在处理为Oracle编写的旧SQL。即使在使用关键字Oracle和SQL谷歌搜索并检查了与+符号有关的问题之后,我仍然不了解select子句的一部分。

我已经检查了where子句here的类似问题的答案,我也找到了用于联接的Oracle文档,但是对于select子句没有意义。

在加号的作用下方给出一个SQL。

select '01,'|| 
lpad( 
   (select nvl(count(*), 0) from table1)
   +
   (select nvl(count(*), 0) from table2)
   +
   (select nvl(count(*), 0) from table3)
,9,'0')
from DUAL

示例输出

01,000011111

从示例sql输出中看,它似乎是用于连接结果,但是我想确定。

2 个答案:

答案 0 :(得分:2)

+不能用于字符串连接。它是用于添加。另外,count()不会返回NULL的值,因此不需要nvl()

这应该等效:

select ('01,' || 
        lpad( ((select count(*) from table1) +
               (select count(*) from table2) +
               (select count(*) from table3)
              ), 9, '0'
            )
        )
from DUAL

答案 1 :(得分:1)

罗申,我同意戈登的观点。该代码将“ 01”与来自三个表的计数的格式化总和连接在一起。 LPAD为零,将总和的值填充为9位数字。 “ ||”是Oracle中的并置符号,尽管也有一个concat函数。很少使用。