問題:ide
我要查詢DateTime時間其中的一段符合時間要求的數據,好比我要查詢‘2019-06-06 16:50:00’至‘2019-06-06 16:59:00’這一段的數據code
開始用這段代碼orm
strSql= ("select * from CollectTableRtd where datetime(DateTime)>=datetime('2019-06-06 16:50:00') and datetime(DateTime)<=datetime('2019-06-06 16:59:00')"); 是能夠查詢出來的,而後換下面代碼:內存
strSql= ("select * from CollectTableRtd where datetime(DateTime)>=datetime('datetime_strf1') and datetime(DateTime)<=datetime('datetime_strf2')"); ci
其中datetime_strf一、datetime_strf2是從控件讀取的選擇時間,然而並無正確讀取,下面也同樣:unicode
strSql= ("select * from CollectTableRtd where datetime(DateTime)>=datetime(datetime_strf1) and datetime(DateTime)<=datetime(datetime_strf2)"); 字符串
sprintf(strSql,"select * from CollectTableRtd where datetime(DateTime)>=datetime('%s') and datetime(DateTime)<=datetime('%s')",datetime_strf1.GetBuffer(),datetime_strf2.GetBuffer());string
後來查閱資料得知須要用%S讀取,結果並驗證正確,附代碼以下:it
sprintf(strSql,"select * from CollectTableRtd where datetime(DateTime)>=datetime('%S') and datetime(DateTime)<=datetime('%S')",datetime_strf1.GetBuffer(),datetime_strf2.GetBuffer());io
在這裏將%s與%S的區別講一講,以下:
請看MSDN:http://msdn.microsoft.com/zh-cn/library/hf4y5e3w(v=vs.90).aspx
的解釋。
s
String
When used with printf functions, specifies a single-byte–character string; when used with wprintf functions, specifies a wide-character string. Characters are printed up to the first null character or until the precision value is reached.
S
String
When used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte–character string. Characters are printed up to the first null character or until the precision value is reached.
使用s時,printf是針對單字節字符的字符串,而wprintf是針對寬字符的
使用S時,正好相反,printf針對寬字符
CString中的format與printf相似,在unicode字符集的工程中,使用
CString str1, str2;
str1.format(_T("%S"), str2);
時
%S專指單字節字符的字符串,而str2爲寬字符,類型不匹配,故出現不可預期的錯誤。
若str2爲英文字符,如「abcd」,就只能輸出a,因str2爲寬字符,a有兩個字節,值爲0x0061,在內存中爲61 00,故按單字節輸出只能輸出61,碰到00,即空字符後認爲字符串結束,不會再輸出。
若str2爲中文字符,中文字符通常會佔滿兩字節,而按單字節字符就會按一個字節一個字節的輸出,故會輸出亂碼。