当我选择一个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
答案 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);
希望这会有所帮助。 -思维