如何使用xdevapi

时间:2018-09-02 13:49:15

标签: c++ mysql mysql-connector

当我选择一个dateTime字段时,它将以6个字节的形式返回。如何将其转换为time_point或struct 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

1 个答案:

答案 0 :(得分:1)

嘿,我花了5个小时来弄清楚同一件事,解决方案是将TIME / DATE / DATETIME字段投影为UNIX时间戳(整数)使用UNIX_TIMESTAMP()

然后,您可以轻松地将字段获取为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);

希望这会有所帮助。 -思维