如何使用xdevapi从mysql获取DateTime

How to fetch DateTime from mysql using xdevapi

本文关键字:获取 DateTime mysql 何使用 xdevapi      更新时间:2023-10-16

当我选择一个日期时间字段时,它以 6 个字节返回。 如何将其转换为time_point或结构 tm?

mysqlx::Session session( "mysqlx://root:password@127.0.0.1:33060/catalog" );
auto row = session.sql( "select create_time from information_schema.tables order by 1 LIMIT 1" ).execute().fetchOne();
assert( row[0].getType()==8 );//raw type
assert( row[0].getRawBytes().second==6 );//6 bytes
var bytes = row[0].getRawBytes().first;
//e2 0f 08 0c 0a 32 
//2018-08-12 10:50:04

嘿,我只是花了 5 个小时来弄清楚同样的事情,解决方案是使用UNIX_TIMESTAMP()TIME/DATE/DATETIME字段投影为 SQL 语句中的 UNIX 时间戳(整数(。

然后,您可以轻松地将字段作为time_t(并可选择转换为struct tm(。

#include<time.h>
mysqlx::Session session{"mysqlx://root:password@127.0.0.1:33060/catalog"};
auto row = session.sql("SELECT UNIX_TIMESTAMP(create_time) FROM information_schema.tables ORDER BY 1 LIMIT 1").execute().fetchOne();
time_t creationTime = (int) row[0];
struct tm* creationTimePoint = localtime(creationTime);

希望这有帮助。-介意