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

如果以姓名作为结果集分组,以姓名为一组产生序号

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值