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 中国大陆许可协议进行许可。
分类:
,
标签:
,
,
,
,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步