2012-01-28 95 views
1

我目前正在尝试从MySQL数据库获取DATETIME键值并将其保存为字符串。C++将修改后的MySQL时间戳存储为字符串

但是我不想的时候要在平时的MySQL格式YYYY-MM-DD HH:MM:SS而是在12小时格式是这样的:HH:MM:SS AM/PM

我已经想通了如何在MySQL数据库中“转换”时间格式我所需的格式,通过使用这样的:

sql::ResultSet* time = database->Query("SELECT DATE_FORMAT(`lastLogin`, '%r') FROM `users` WHERE `user_id`='%i', id); 

MySQL命令是有效的,所述查询返回正确的时间格式(I直接在MySQL测试它)。

现在我想将结果存储在一个char *数组中,但由于某种原因,当我尝试将结果复制到数组中时,他总是与SQL无效命令异常一起崩溃。

time->first(); 
char* lastLogin = new char[50]; 

//here are the variants of the commands I tried, every one crashed: 
strcpy(lastLogin, time->getString("lastLogin").c_str()); 
strcpy(lastLogin, time->getString("DATE_FORMAT(`lastLogin`, '%r')").c_str()); 
strcpy(lastLogin, time->getString("DATE_FORMAT(lastLogin, '%r')").c_str()); 
strcpy(lastLogin, time->getString(0).c_str()); 

有没有人知道我在做什么错?或者,这甚至可以使用MySQL Connector C++?

+0

你的'gdb'调试器告诉你什么?你有没有试过类似于'SELECT DATE_FORMAT('lastLogin','%r')的查询AS lastloginr FROM users WHERE user_id ='%i''? – 2012-01-28 11:58:07

+0

是的,我已经想出了解决方案。我必须将%r作为字符串传递给方法调用,否则它将被解释为简单的“r”。 – user1175111 2012-01-28 13:48:14

+0

或者'%% r',因为通常的约定是双'%'被“扩展”为单个... – 2012-01-28 14:59:58

回答

0

尝试命名表达你的SQL,给它一个别名:

"SELECT DATE_FORMAT(`lastLogin`, '%r') as last_login_str FROM `users` WHERE `user_id`='%i'" 

然后使用"last_login_str"检索值。

+0

我不确定这是否会起作用,所以让我知道它是否崩溃,我会删除答案。 – dasblinkenlight 2012-01-28 11:59:01

+0

以及纯粹的MySQL工作。当我用C++运行它时,它也被接受了,但是我得到的值很奇怪,char数组lastLogin后面只包含一个“r”。 – user1175111 2012-01-28 13:16:20

+0

它看起来像MySQL连接试图解释'%r'作为传递给命令的参数。我不知道如何转义'%',但是如果你传递'“%r”'字符串作为参数给命令,它应该可以工作。 'database-> Query(“SELECT DATE_FORMAT('lastLogin',%r)as last_login_str FROM'users' WHERE'user_id' ='%i'”,“%r”,id)'。请注意,我删除了'%r'附近的单引号。 – dasblinkenlight 2012-01-28 13:35:45