2012-01-28 85 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

相關問題