数据导入从PostgreSQL的NaT

5视图(30天)
保罗
保罗 2023年2月1日
编辑: 保罗2023年3月24日
我需要从Postgres数据库获取数据。一个列的表我查询类型“时区时间戳”。这一列中的值可以有分数秒到微秒。我是连接到数据库服务器使用本机postgresql数据源。我从这个表做一个简单的获取。时间戳列中的值是一个整体的秒数(如31 - 1月- 2023 17:02:00.000000)正确地出现在返回的matlab表对象,但是,时间戳有一个非零部分组件(例如:31 - 1月- 2023 17:02:00.001234),导入的值是“NaT”。
如果我在pgAdmin检查原始表,所有的时间戳值正确显示。我怎么能确保所有进口时间戳的值是正确的吗?
我是9.3.25 Postgres版本
这是我在做什么(准确的数据库名称、密码等混淆)。
供应商=PostgreSQL的;
dbname =“target_database”;
选择= databaseConnectionOptions (“本地”、供应商);
选择= setoption(选择,
“DataSourceName”,“PostgreSQLDataSource”,
“数据库名”dbname,
“服务器”,“localhost”,
“PortNumber”,5432);
saveAsDataSource(选择);
% %连接到数据库
康涅狄格州= postgresql (“PostgreSQLDataSource”,“myuser”,“我的密码”);
%设置查询在数据库上执行
查询=“select * from target_index_table”;
% %执行查询和获取结果
data =获取(康涅狄格州、查询);
% %关闭数据库连接
关上(康涅狄格州)
% %明显的变量
清晰的康涅狄格州查询

答案(1)

HimeshNayak
HimeshNayak 2023年3月17日
嗨,保罗,
根据我的理解,当你从PostgreSQL数据库导入数据,“时间戳”值与一个非零部分组件转换为“NaT”。
所有的零次秒级精度的时间戳是返回的司机比的值在不同的格式有非零次秒级精度。当我们将这些字符串值转换成日期时间,datetime函数选择其中一种格式,然后设置任何值,不符合格式NaT。
现在的解决方法我建议使用“databaseImportOptions”。您可以使用的选项改变数据类型从一个datetime“字符串”或“char向量”。这将允许您在原始文本值从数据库中返回。如果你需要datetime值,你可以纠正不一致的格式一旦进口,然后将它们传递给datetime函数。
有关更多信息,请参阅以下链接:
问候
HimeshNayak
2的评论
保罗
保罗 2023年3月24日
编辑:保罗 2023年3月24日
解决方法是黑色的工作。
如此:
康涅狄格州= postgresql (“PostgreSQLDataSource”,“myuser”,“我的密码”);
iopts = databaseImportOptions(康涅狄格州,“target_index_table”);
iopts = setoption (iopts, {“时间戳”},“类型”,“字符串”);
%设置查询在数据库上执行
查询=“select * from target_index_table”;
% %执行查询和获取结果
data =获取(康涅狄格州、查询、iopts);
但是如果我使查询更加复杂:
康涅狄格州= postgresql (“PostgreSQLDataSource”,“myuser”,“我的密码”);
iopts = databaseImportOptions(康涅狄格州,“target_index_table”);
iopts = setoption (iopts, {“时间戳”},“类型”,“字符串”);
%设置查询在数据库上执行
查询=“select * from target_index_table entrynumber > 100”;
% %执行查询和获取结果
data =获取(康涅狄格州、查询、iopts);
我得到一个错误:
错误使用database.relational.connection /取回
无法使用数据库导入选项
select * from target_index_table entrynumber > 100”。
我有什么地方做的不对吗?
编辑添加:我不想导入整个表的——它可能是巨大的(成千上万的行),而且这样做否定的原因在第一时间使用RDBMS。

登录置评。

标签

s manbetx 845


释放

R2022b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!