ERROR: invalid value "" for "yyyy"
错误信息
invalid value "" for "yyyy" (seg0 slice1 10.157.3.15:6000 pid=40808)
DETAIL: Value must be an integer.
环境背景
在进行存储过程插入表数据的时候,在进行字符串转日期格式的时候,插入目标表字段要求是date类型,但是原表是字符串类型,并且这个字段在原表中还存在数据是空字符串的,有长度是空,出现了以上问题,
再直接说就是select to_date(' ','yyyy-MM-dd')这样写就会报错,说明你的数据里面这个字段有为一个空格的数据。可以查询出来看看。
sql:TO_DATE( SUBSTRING ( 'date', 1, 10 ), 'yyyy-mm-dd' ) makedate
原表 date字段是 这样的格式 2021-05-11 10:00:01,这里可以不用截取,因为在pg数据库中只会保存yyyy-mm-dd 格式的,会自动截取。
如果date字段是空的话,就会报以上错误,
解决方式:判断一下,如果是空的字符串(有长度),需要使用trim()方法。不等于空的时候才进行插入,否则目标表就会自动赋值null,
方式:case when trim(date) != '' then to_date(SUBSTRING (date, 1, 10),'yyyy-MM-dd') end makedate
这样就不报错了。
在补充一下,在pg数据库中使用to_date(),它是只保存yyyy-mm-dd 格式的,注意一下。date_format函数在pg数据库怎么替换(pg数据库格式化日期)