SQLite中使用变量实现波斯历(Shamsi)日期范围查询问题
解决SQLite波斯历日期变量查询无结果的问题
问题核心是变量拼接SQL时未添加单引号,导致SQL解析逻辑错误:
- 使用常量时你给日期加了单引号(
'1401-10-01'),SQL会将其识别为字符串类型的日期值; - 直接拼接变量时,SQL会把
$date_1的值当成数学表达式(比如1401-10-01会被计算为1390),而非你需要的日期字符串,因此无法匹配数据。
推荐解决方案:参数化查询
使用SQLite的参数占位符?,通过rawQuery的第二个参数传递变量,SQLite会自动处理字符串引号,同时避免SQL注入风险:
// 先确保date_1和date_2不为null if (date_1 != null && date_2 != null) { var queryResult = db!.rawQuery( "SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN ? AND ?", [date_1, date_2] ); // 处理查询结果 }
不推荐的手动拼接方式(存在SQL注入风险)
如果一定要直接拼接字符串,需给变量手动添加单引号,但要注意:若变量包含单引号,会导致SQL语法错误:
if (date_1 != null && date_2 != null) { var queryResult = db!.rawQuery( "SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN '$date_1' AND '$date_2'" ); }
内容的提问来源于stack exchange,提问作者Reza Asgharian
相关产品推荐
相关产品推荐

