postgresql 初始化构造字段
insert into hr.hr_employee
(name,id,employee_number) --新增数据对象表
--构造表
select
a.name,
a.union_id as "id",
b.code || lpad(cast((ROW_NUMBER() over(partition by b.code )) as varchar(4)),4,'0') as "employee_number"--构造编号
from sys_user a
left JOIN sys_office b on b.id = a.office_id
left join sys_department c on c.id = b.source_id
where a.company_id = (SELECT id from sys_office where name like '%洪塘%' and type = '2')
and a.use_status ='01'
and a.del_flag = '0'
and a.check_status ='1'
and a.office_id is not null
ORDER BY b.name,c.dept_type;
注解:
1.lpad:语法格式如下:
lpad( string, padded_length, [ pad_string ] )
string
准备被填充的字符串;
padded_length
填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;
pad_string
填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格。
例如:select lpad('12',4,'0'); --运行结果: 0012 。就是说在12的左边加0然后在截取4位。
2.cast:语法如下
CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型
例如:SELECT CAST('12' AS int); --就是类型转换
3.ROW_NUMBER() over(partition by b.code )
row_number() over()分组排序功能:
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by order by 的执行。
partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录
例如:
1.select ROW_NUMBER() over() from hr.hr_employee;
不指定结果集分组 ,可以理解为***
2.select ROW_NUMBER() over(partition by name),name from hr.hr_employee
如果以姓名作为结果集分组,以姓名为一组产生序号