This theme is built wi|

ageovb

园龄:13年3个月粉丝:13关注:0

2022-09-25 17:40阅读: 148评论: 0推荐: 0

pgsql 的 fdw 插件不能把 SQL Server 的 date 映射为 date?

问题现象

需要访问老系统中的 SQL Server,其中有个字段是 date 类型,本以为创建的外表也使用 date 就可以,实际上查询时报错:

SQL 错误 [22007]: ERROR: invalid input syntax for type date: "Apr 20 2020 12:00:00:AM"

SQL Server 中的日期数据是 2020-04-20,跟上面的格式也不一致。

问题分析

SQL Server 的 date 类型是 3 个字节,pgsql 的 date 类型是 2 个字节,理论上 mssql_fdw 应该会做转换的,实际上好像转换成了上述错误信息中的格式。

问题原因

可能是 mssql_fdw 有问题。

解决方法

按照 SQL Server and PostgreSQL Foreign Data Wrapper Configuration - Part 3,应该使用 varchar 或 text 来接收 date 等类型。

然后在代码里面将字符串转换为日期:

// 格式化 AM、PM 之类的日期,需要指定英文环境
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy hh:mm:ss:a", Locale.ENGLISH);
LocalDateTime dateTimeObj = LocalDateTime.from(formatter.parse("Apr 20 2020 10:00:00:PM"));

参考资料

SQL server Date 数据类型(分类、内置函数等)
pgsql 日期/时间类型
java 时间字符串中带 “AM“ 或 “PM“ 等指示上半天,下半天标识的解析
Java 日期格式模式
Java 8 日期、时间与格式化

本文作者:ageovb

本文链接:https://www.cnblogs.com/ageovb/p/16728352.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   ageovb  阅读(148)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起