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

如何将计算月末余额的MySQL查询转换为SQLite3可用语句

SQLite 适配MySQL月末统计查询的实现方案

SQLite 没有内置与MySQLLast_Day()等价的原生函数,可通过内置日期修饰符组合实现完全一致的效果,同时适配原查询里的日期格式转换、格式化逻辑,最终可直接运行的语句如下。

核心替换逻辑

原MySQL语句里的三个专有函数都可以用SQLite原生能力替换:

  • Str_to_date(dt.date, '%m/%d/%Y'):由于存储的日期是MM/DD/YYYY格式字符串,通过字符串截取拼接为SQLite可识别的YYYY-MM-DD格式即可,写法为substr(dt.date,7,4) || '-' || substr(dt.date,1,2) || '-' || substr(dt.date,4,2)
  • Last_day(xxx):通用月末计算逻辑为「取日期所在月的下一月第一天,再减1天」,SQLite对应写法为date(合法日期值, 'start of month', '+1 month', '-1 day')
  • Date_format(xxx, '%Y/%m/%d'):将计算得到的标准日期里的横杠替换为斜杠即可匹配输出格式,写法为replace(月末日期值, '-', '/')

转换完成的SQL语句

SELECT c.country,
       replace(
         date(
           substr(dt.date,7,4) || '-' || substr(dt.date,1,2) || '-' || substr(dt.date,4,2),
           'start of month',
           '+1 month',
           '-1 day'
         ),
         '-',
         '/'
       ) AS Month_End_Balance,
       Sum(dt.amount) AS in_Euro
FROM deposit_transactions AS dt
LEFT JOIN customers AS c
       ON c.customer_id = dt.customer_id
GROUP BY c.country, Month_End_Balance 
ORDER BY Month_End_Balance DESC

补充说明

如果dt.date字段本身已经存储为SQLite支持的标准YYYY-MM-DD格式,可以去掉substr拼接转换的部分,直接将日期计算部分写为date(dt.date, 'start of month', '+1 month', '-1 day'),执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:54:23