Как получить DateTime из MySQL, используя xdevapi

Когда я выбираю поле 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 ответ

Эй, я потратил 5 часов, пытаясь понять то же самое, решение состоит в том, чтобы спроектировать TIME / DATE / DATETIME поле как отметка времени UNIX (целое число) в вашем выражении SQL, используя 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 = row[0]; //The Value gets automatically converted
struct tm* creationTimePoint = localtime(creationTime);

Надеюсь это поможет. -Minding

Другие вопросы по тегам