PostgreSQL 低级错误集锦 (不定时更新)

低级错误真的浪费时间且菜,希望不再犯低级重复错误。

1.to_date()函数日期转换报错

SQL语句:

SELECT job_date FROM data_check
WHERE data_type = 'S';

查询结果:

job_date |
----------+
2023-01-28|

我希望用update语句更新job_date字段,但出现报错,就用SELECT语句查看问题。

我的SQL:

SELECT to_date('20230127','yyyy-mm-dd hh24:mi:ss') FROM data_check
WHERE data_type = 'S' ;

报错信息:

SQL 错误 [22008]: ERROR: date out of range: "20230127"

为什么报错?

在 PostgreSQL 中,to_date 函数用于将字符串转换为日期,"20230127" 不是有效的日期格式,因此导致了日期超出范围的错误。

在我的 SQL 查询中,to_date('20230127','yyyy-mm-dd hh24:mi:ss') 的日期格式为 'yyyy-mm-dd hh24:mi:ss',但是输入的字符串 "20230127" 并不符合该格式,因此 PostgreSQL 无法正确解析。

使用to_date函数时,转换格式需要和日期本来的格式相匹配

正确的SQL:

SELECT to_date('20230127', 'YYYYMMDD');

2.update /insert 语句中的字符串转义问题

假设我的列为column_a,现在需要对column_a进行更改,更改的文本如下所示:

'start_date < to_date('##某年度数据', 'yyyyMMdd') AND (CASE WHEN month IS NOT NULL AND other_month IS NOT NULL THEN CASE WHEN month > other_month THEN to_date(month, 'yyyyMMdd') ELSE to_date(other_month, 'yyyyMMdd') END WHEN month IS NULL THEN to_date(date3, 'yyyyMMdd') WHEN other_month IS NULL THEN month(date2, 'yyyyMMdd') END) < to_date('##某表年月', 'yyyyMMdd')' 

在编辑窗口就感觉到文本中存在转义的问题,造成问题的原因是引号引起的。 

解决方式是:在引号处多打一个引号

'start_date < to_date(''##某年度数据'', ''yyyyMMdd'') AND (CASE WHEN month IS NOT NULL AND other_month IS NOT NULL THEN CASE WHEN month > other_month THEN to_date(month, ''yyyyMMdd'') ELSE to_date(other_month, ''yyyyMMdd'') END WHEN month IS NULL THEN to_date(date3, ''yyyyMMdd'') WHEN other_month IS NULL THEN month(date2, ''yyyyMMdd'') END) < to_date(''##宽表活动月下限'', ''yyyyMMdd'')'

 编辑窗口显示正常

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值