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

WebSQL查询失效:如何从数据库筛选今日任务数据?

解决WebSQL筛选今日任务数据的问题

你遇到的核心问题是:数据库里的START_DATE字段包含完整的时间戳(比如2018-04-23 0:52),但你用moment生成的curDate是纯日期格式(YYYY-MM-DD),直接用等于匹配会因为格式不一致导致查询失效。WebSQL基于SQLite语法,我们可以用两种方式解决这个问题:

方案一:用SQLite的DATE()函数提取日期部分

SQLite的DATE()函数可以自动从带时间的字符串中提取出YYYY-MM-DD格式的日期,这样就能和你生成的curDate直接匹配。示例代码如下:

var curDate = moment().format('YYYY-MM-DD');
this.db.transaction(function(tx) {
  tx.executeSql(
    'SELECT * FROM TASK_ITEM WHERE DATE(START_DATE) = ?',
    [curDate],
    function(tx, results) {
      // 遍历处理查询结果
      for (let i = 0; i < results.rows.length; i++) {
        console.log('今日任务:', results.rows.item(i));
      }
    },
    function(tx, error) {
      console.error('查询出错:', error.message);
    }
  );
});

这种方式代码简洁,不需要手动处理时间范围,适合快速实现需求。

方案二:时间范围查询(性能更优)

如果你的START_DATE字段建了索引,推荐用时间范围查询,这样能利用索引提升查询效率。我们只需要查询今日00:00:00到明日00:00:00之间的数据:

// 获取今日起始时间和明日起始时间
var startOfToday = moment().startOf('day').format('YYYY-MM-DD HH:mm:ss');
var startOfTomorrow = moment().add(1, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss');

this.db.transaction(function(tx) {
  tx.executeSql(
    'SELECT * FROM TASK_ITEM WHERE START_DATE >= ? AND START_DATE < ?',
    [startOfToday, startOfTomorrow],
    function(tx, results) {
      // 处理查询结果
      for (let i = 0; i < results.rows.length; i++) {
        console.log('今日任务:', results.rows.item(i));
      }
    },
    function(tx, error) {
      console.error('查询出错:', error.message);
    }
  );
});

这个方式能精准覆盖今日所有带时间的任务,同时避免了函数计算对索引的影响。

额外提示

需要注意的是,WebSQL已经被W3C标记为废弃标准,后续浏览器可能会逐步停止支持。如果你的项目还处于早期阶段,建议考虑切换到IndexedDB——它是目前官方推荐的浏览器端数据存储方案,功能更完善且兼容性更好。

内容的提问来源于stack exchange,提问作者Amely

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:12:26