查询SQLite数据库中的日期
querying SQLite database for dates
我是数据库新手,正在试用SQLite最新版本3.25.2
我用文件信息建立了一个简单的数据库,将日期存储为ISO字符串(文本(。所有项目的查询显示:
sqlite3_exec(db, "SELECT * FROM dir", callback, 0, 0);
结果(通过回调打印输出(
system.NAME = New File.txt
modified = '2018-11-03 11:35:42'
system.NAME = ReadMe.txt
modified = '2018-11-01 10:43:21'
...
但当我试图查询特定日期(比所述日期更近的文件(时,查询结果为空!?
sqlite3_exec(db, "SELECT * FROM dir WHERE modified > '2018-11-02 00:00:00'", callback, 0, 0);
而从上面数据库中的文件中可以看到,至少有一个(Newfile.txt(应该与查询匹配。我还尝试将日期存储为整数和实数,但没有任何运气
这一定是什么愚蠢的东西,但我看不出来:(
使用:-
rc = sqlite3_exec(db,"CREATE TABLE IF NOT EXISTS dir (system_name TEXT, modified TEXT);",callback,0,&zErrMsg);
sqlite3_free(zErrMsg);
rc = sqlite3_exec(db,"INSERT INTO dir VALUES('New File.txt','2018-11-03 11:35:42'),('Readme.txt','2018-11-01 10:43:21');",callback,0,&zErrMsg);
sqlite3_free(zErrMsg);
rc = sqlite3_exec(db,"SELECT * FROM dir;",callback,0,&zErrMsg);
sqlite3_free(zErrMsg);
rc = sqlite3_exec(db,"SELECT * FROM dir WHERE modified > '2018-11-02 00:00:00';",callback,0,&zErrMsg);
sqlite3_free(zErrMsg);
结果:-
system_name = New File.txt
modified = 2018-11-03 11:35:42
system_name = Readme.txt
modified = 2018-11-01 10:43:21
system_name = New File.txt
modified = 2018-11-03 11:35:42
然而,考虑到您的输出中的日期周围有单引号,则:-
rc = sqlite3_exec(db,"CREATE TABLE IF NOT EXISTS dir (system_name TEXT, modified TEXT);",callback,0,&zErrMsg);
sqlite3_free(zErrMsg);
rc = sqlite3_exec(db,"DELETE FROM dir;",callback,0,&zErrMsg);
sqlite3_free(zErrMsg);
rc = sqlite3_exec(db,"INSERT INTO dir VALUES('New File.txt','''2018-11-03 11:35:42'''),('Readme.txt','''2018-11-01 10:43:21''');",callback,0,&zErrMsg);
sqlite3_free(zErrMsg); //<<<<<<<<<< ADDED single quotes
rc = sqlite3_exec(db,"SELECT * FROM dir;",callback,0,&zErrMsg);
sqlite3_free(zErrMsg);
rc = sqlite3_exec(db,"SELECT * FROM dir WHERE modified > '2018-11-02 00:00:00';",callback,0,&zErrMsg);
sqlite3_free(zErrMsg);
确实产生了你的结果。基本上是因为单个报价在作为价值的一部分存储时会被考虑在内(至少从您显示的报价中可以看出(。
因此,该查询的修复方法是使用:-
sqlite3_exec(db,"SELECT * FROM dir WHERE modified > '''2018-11-02 00:00:00''';",callback,0,0);
但是,最好不要将值括在单引号中。
相关文章:
- 查询SQLite数据库中的日期
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在ArangoDb AQL查询中指定数据库
- Log4cpp:以UTC/GMT时区打印日期
- 从数据库实时显示QT c++中的数据
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 使用C++的日期库读取时间
- 无法在C++中建立与MySQL数据库的连接
- 将类实现到数据库程序中
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 日期格式为C++
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 C++20 计时中为日期添加天数?
- 如何在QTableView中排序和更改日期格式
- 调试编译的服务器在数据库打开时崩溃
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- C++变量mysql_query到数据库
- 将当前日期与 c++ 中的 sql 数据库条目匹配