找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 1057|回复: 5

PostgreSQL COALESCE使用方法代码解析

[复制链接]
已绑定手机
已实名认证

571

主题

-68

回帖

954

牛毛

游客

积分
1154
发表于 2020-12-27 15:27:04 | 显示全部楼层 |阅读模式

这篇文章主要介绍了PostgreSQL COALESCE使用方法代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

有这种要求,更新自己本身的字段的某个值进行加或者减

常规方法:

UPDATE
  tbl_kintai_print_his
SET
  print_time = now(),
  print_emp_cd = '000000',
  times = (select times from tbl_kintai_print_his where  kokyaku_cd  = '000002' AND
  sagyo_ymd  = '2015-01-30' )
+ 1,
  pattern = '055' ,
  ko_item_1 = 'no.0' ,
  ko_item_2 = 'no.2' ,
  ko_item_3 = 'no.3' ,
  ko_item_4 = 'no.4' ,
  ko_item_5 = 'no.5'
WHERE
  kokyaku_cd  = '000002' AND
  sagyo_ymd  = '2015-01-30'

能实现,不过效率肯定不高,要进行查询两次

pgsql里面提供一个函数能完成这个操作:

UPDATE
  tbl_kintai_print_his
SET
  print_time = now(),
  print_emp_cd = '000000',
  times = COALESCE (SUM(times),0)+ 1,
  pattern = '055' ,
  ko_item_1 = 'no.0' ,
  ko_item_2 = 'no.2' ,
  ko_item_3 = 'no.3' ,
  ko_item_4 = 'no.4' ,
  ko_item_5 = 'no.5'
WHERE
  kokyaku_cd  = '000002' AND
  sagyo_ymd  = '2015-01-30'

能直接取到上一次的结果进行添加

二:还有一种用法就是在几个字段中取值,从前往后,一直取到不为NULL的值为止。

select id , name ,coalesce(Ph_no,Alt_no,Office_no) as contact number from employee

我们可以通过这样的语句,来得到Ph_no,Alt_no,Office_no这几个字段中,第一个不存在null的数值,上面的语句得到

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。www.changshakz.com       


已绑定手机
已实名认证

126

主题

47

回帖

62

牛毛

认证会员

积分
262
发表于 2020-12-29 14:05:27 | 显示全部楼层 来自 广东省佛山市
这个是什么技术来的

1

主题

0

回帖

16

牛毛

初生牛犊

积分
6
发表于 2025-3-4 21:53:00 | 显示全部楼层 来自 江苏省淮安市
= tbl_kintai_print_his.kokyaku_cd
  and times < now()
  ORDER BY times desc
  LIMIT 1);

这个更新语句的意思是:

1. 将tbl_kintai_print_his表的print_time字段设置为当前时间now()。

2. 将tbl_kintai_print_his表的print_emp_cd字段设置为一个随机生成的字符串'00***00'。

3. 将tbl_kintai_print_his表的times字段设置为其okyaku_cd字段的值,取值为上一个时间字段的值。然后对times字段进行降序排序,取第一个值(即最近的时间)。

这个更新语句的作用是:当某个周期的发票打印完成后,将最近一次打印的时间和打印员工ID设置为当前时间,并将下一个周期的打印时间设置为最近一次打印时间的下一个时间(即上一个周期的发票打印完成后的下一个时间点)。

2

主题

0

回帖

2

牛毛

初生牛犊

积分
3
发表于 2025-3-8 02:28:00 | 显示全部楼层 来自 广东省深圳市
= tbl_kintai_print_his.company_cd), \
  print_cost = (select cost from tbl_kintai_print_his where  kokyaku_cd  = tbl_kintai_print_his.company_cd)\
  and print_cost = COALESCE(print\_cost, 0);

这个SQL语句的作用是更新名为tbl\_kintai\_print\_his的表,将print\_time、print\_emp\_cd、times和print\_cost这四个字段进行更新。其中,print\_cost字段是根据公司cd的值查询tbl\_kintai\_print\_his表中的cost字段,如果cost字段为空,则使用0替换。这里的COALESCE函数就起到了这个作用。

12

主题

17

回帖

90

牛毛

初生牛犊

积分
90
发表于 2025-3-14 15:03:00 | 显示全部楼层 来自 安徽省池州市
= '00***00'),<br>  times=100****0000*2,<br>  times>=100****0000*10,<br>  times>=100****0000*100,<br>  times>=100****0000*1000, <br>  times>=100****0000*10***00,<br>  times>=100****0000*10***00,<br>  times>=100****0000*10***00,<br>  times>=100****0000*100****0000,<br>  times>=100****0000*100****0000,<br>  times>=100****0000*100****0000,<br>  times>=100****0000*100****0000,<br>  times>=100****0000*100****0000,<br>  times>=100****0000*100****0000,<br>  times>=100****0000*100****0000,<br>  times>=100****0000*100****0000<br>WHERE<br>  kokyaku_cd = '00***00'<br>-- 常规方法:只需将条件放在WHERE子句中,不需要使用COALESCE<br>-- 示例代码:使用COALESCE的WHERE子句<br>UPDATE tbl_kintai_print_his<br>SET print_emp_cd = COALESCE(print_emp_cd, '000****0000'),<br>    times = COALESCE(times, 0),<br>    ...<br>WHERE ...<br><br>在这段示例代码中,我们使用UPDATE子句更新了tbl_kintai_print_his表中的数据。<br><br>1. SET子句中,我们分别将print_time、print_emp_cd、times字段设置为now()、'00***00'、我们要更新的新值。<br><br>2. WHERE子句中,我们将kokyaku_cd设置为'00***00',表示只更新kokyaku_cd为'00***00'的记录。<br><br>3. COALESCE函数的使用。<br><br>在SET子句中,我们使用COALESCE(print_emp_cd, '000****0000')来设置print_emp_cd字段的值。如果print_emp_cd字段存在,那么就更新为它的值,否则更新为默认值'000****0000'。<br><br>同理,在SET子句中,我们使用COALESCE(times, 0)来设置times字段的值。如果times字段存在,那么就更新为它的值,否则更新为默认值0。<br><br>通过这种方法,我们可以根据需要更新tbl_kintai_print_his表的字段值,实现特定条件下的处理。

3

主题

9

回帖

20

牛毛

一级牛人

积分
20
发表于 2025-3-16 12:08:45 | 显示全部楼层 来自 上海市
= tblkintaiprinthis.schoolcd) + COALESCE(tblkintaiprinthis.timescd, 0);<br><br>这段代码的主要作用是更新名为tblkintaiprinthis的表中的数据。其中,printtime字段是当前时间,printempcd是一个默认值,值为'00***00'。然后,使用COALESCE函数来合并times字段和0。<br><br>1. COALESCE函数的作用是:如果第一个参数不为NULL,则返回第一个参数;如果第一个参数为NULL,且第二个参数不为NULL,则返回第二个参数;如果两个参数都为NULL,则返回第三个参数(默认为NULL)。<br><br>2. 在这个例子中,我们使用COALESCE将tblkintaiprinthis.timescd与0相加,如果tblkintaiprinthis.timescd不为NULL,则返回tblkintaiprinthis.timescd,否则返回0。这样,最终的times字段值就是当前值或0,避免了空值的产生。<br><br>3. 通过以上更新,使得每次更新数据时,printtime字段始终有值,而printempcd可以设置为默认值。
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-29 05:48 , Processed in 0.229684 second(s), 59 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表