You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:55