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

如何将匹配年份区间的SQL查询转换为Django ORM查询?

将指定SQL转换为Django ORM查询

场景背景

现有数据表结构如下,查询参数为2018:

idregistration_year
12014-2016
22017-2019

对应的SQL查询语句为:

SELECT id FROM table_name 
WHERE
SUBSTRING(registration_year,1,4) <= 2018 
AND 
SUBSTRING(registration_year,6,4) >= 2018

执行该SQL将得到id=2的结果,需将此查询转换为Django ORM语句。

实现代码

首先导入Django提供的Substr数据库函数,再通过模型的filter方法构建查询条件:

from django.db.models import Substr

# 假设你的模型类名为TableModel,对应数据库表table_name
matched_ids = TableModel.objects.filter(
    Substr('registration_year', 1, 4) <= '2018',
    Substr('registration_year', 6, 4) >= '2018'
).values_list('id', flat=True)

补充说明

  • Substr函数与SQL中的SUBSTRING功能完全对应,参数依次为字段名、起始截取位置(1-based,和SQL规则一致)、截取长度
  • 使用values_list('id', flat=True)会返回一个仅包含符合条件id的一维列表,和原SQL的查询输出一致
  • 如果确认符合条件的结果只有一条,可将values_list替换为.first(),直接获取对应的模型实例(无匹配时返回None)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:47:15