目录
[2.IN / NOT IN](#2.IN / NOT IN)
[9. 版本/组件/标签示例](#9. 版本/组件/标签示例)
[结合 Python jira库的调用](#结合 Python jira库的调用)
什么是JQL?
JQL(Jira Query Language)是 Jira 里用来"筛选问题(Issue)"的查询语言,本质上就是:用 字段 + 运算符 + 值 组合出条件,再用 AND/OR/NOT 拼起来,最后可 ORDER BY 排序。
JQL语法介绍
JQL的基本结构
JQL的基本结构如下:
python
<条件1> AND <条件2> OR <条件3> ORDER BY <字段> DESC
常见入门例子:
python
project = KR AND status != Done ORDER BY updated DESC
JQL常用字段
project:项目(Key 或名称)issuekey/key:单号(如KR-123)issuetype:类型(Bug/Task/Story...)status:状态(To Do/In Progress/Done...)assignee:经办人reporter:报告人creator:创建人priority:优先级labels:标签component:组件fixVersion/affectedVersionsummary/description(文本搜索常搭配~)created/updated/resolved:时间字段
JQL运算符
1.等于/不等于
python
project = KR
status != Done
issuetype = Bug
2.IN / NOT IN
python
project in (KR, KRSW) AND issuetype in (Bug, Task)
status not in (Done, Closed)
3.为空/非空
python
assignee is EMPTY
fixVersion is not EMPTY
4.文本包含(模糊匹配)
python
# ~:包含/模糊匹配(对文本字段常用)
summary ~ "memory leak"
description ~ "timeout"
5.时间比较
python
updated >= "2025-01-01"
created < "2026-01-01"
6.逻辑组合(AND/OR/NOT)与括号
python
# AND 优先级通常高于 OR,复杂表达式一定加括号
project = KR AND (status = "In Progress" OR status = "To Do")
# 排除条件
project = KR AND NOT labels = obsolete
7.排序
python
project = KR ORDER BY priority DESC, updated DESC
8.人员相关的常用写法
python
assignee = currentUser()
reporter = currentUser()
assignee was currentUser() -- 曾经指派给我(历史)
status changed to Done after -14d -- 14天内变为Done
9. 版本/组件/标签示例
python
project = KR AND fixVersion = "1.2.3"
project = KR AND component = "WiFi"
project = KR AND labels in (customer, urgent)
结合 Python jira库的调用
关于实践中如何调用,下面给一个具体的例子作为参考:
python
# 查询project为KR 而且statusCategory为Done 的issue,最后降序排列
jql = 'project = KR AND statusCategory != Done ORDER BY updated DESC'
# 根据时间 + 创建人 + 关键字(summary/description 模糊匹配)
jql = """
project = KR
AND created >= "2025-01-01"
AND created < "2025-02-01"
AND creator = "someone"
AND (summary ~ "timeout" OR description ~ "timeout")
ORDER BY created DESC
"""
# 根据指派给某人 + 但报告人是我 + 近 30 天内创建来筛选
jql = """
project = KR
AND assignee = "someone"
AND reporter = currentUser()
AND created >= -30d
ORDER BY created DESC
"""
issues = jira.search_issues(jql, maxResults=50, fields="summary,status,assignee,updated")
for i in issues:
print(i.key, i.fields.status.name, i.fields.summary)
以上!