SQL 错误 [22007]: ERROR: invalid input syntax for type date: ““

0. 背景

PG数据库一张表有这样一个varchar类型的字段end_date,存储的值是格式化后的年月日日期如 2024-08-10

现在我需要根据当前日期与end_date的差值作为where条件过滤,我的写法

sql 复制代码
select ......
from my_table_name
where current_date - cast (end_date as date) >=100

报错

Caused by: org.postgresql.util.PSQLException: ERROR: invalid input syntax for type date: ""

1. 原因

这个错误翻译:

无效的类型date的输入语法:""

"" 代表end_date 字段中存在空字符串(""),显然它不能正确地转换为date类型!!!

我们group by end_date 发现,该字段的确存在不正确的value ,如

空字符串""/字母N,具体参考下图

2. 解决

根据业务需求,我只需要取正确的日期即可:用正则仅匹配正确格式的日期进行过滤即可

sql 复制代码
select ......
from my_table_name
where 
end_date ~'^\d{4}-\d{2}-\d{2}$'
AND
current_date - cast (end_date as date) >=100

2.1 PG正则相关

正则操作符

~:用于进行正则表达式匹配。

~*:类似于 ~,但是进行不区分大小写的正则匹配。

!~:用于进行正则表达式不匹配。

!~*:类似于 !~,但是进行不区分大小写的正则不匹配。
正则表达式约束

^: 串开头的匹配

$:串结尾的匹配

其他就是常见的正则知识了:\d表示数字...

相关推荐
博语小屋2 小时前
实现简单日志
linux·服务器·数据库·c++
程序员小白条9 小时前
0经验如何找实习?
java·开发语言·数据结构·数据库·链表
liulilittle9 小时前
C++ 浮点数封装。
linux·服务器·开发语言·前端·网络·数据库·c++
郭涤生9 小时前
QT 架构笔记
java·数据库·系统架构
韩立学长9 小时前
基于Springboot流浪动物领养网站0kh2iyb4(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
DBA小马哥9 小时前
Oracle迁移到金仓数据库:完整迁移步骤与兼容性优化实战
数据库·oracle·国产化平替
@nengdoudou9 小时前
KStudio 客户端无法访问 KES 数据库服务器的指定 IP / 端口
数据库
宋军涛10 小时前
记一次Sqlserver数据库存储过程调用导致的连接池耗尽事件
数据库
前端小臻10 小时前
MySQL 错误 1005 (errno: 150) 深度解析与解决方案
数据库·mysql
魔镜前的帅比10 小时前
向量数据库原理
数据库·人工智能