🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 聚宽 API:finance.run_query 中 filter 函数如何实现模糊匹配(包含)?

joinquant | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

请教:filter函数中如何使用包含?

比如以下的代码中,'中央汇金投资有限责任公司'这个改成'中央汇金',如何能搜到原有的数据?

def get_institution_hold_sec(shareholder_name,date):
from jqdata import finance
all_data2 = finance.run_query(query(finance.STK_SHAREHOLDER_FLOATING_TOP10).\
filter(finance.STK_SHAREHOLDER_FLOATING_TOP10.shareholder_name==shareholder_name,\
finance.STK_SHAREHOLDER_FLOATING_TOP10.pub_date>=date).limit(2000))
data = all_data2[['company_name','code','end_date','pub_date','shareholder_name','shareholder_rank','shareholder_class','share_number','share_ratio','sharesnature']]
data.columns=['股票名称','股票代码','截止日期','公告日期','股东名称','股东名次','股东性质','持股数量','占总股本比例%','股份性质']
return data
shareholder_name = '中央汇金投资有限责任公司'
date = '2018-09-30'
get_institution_hold_sec(shareholder_name,date)

解决方案

在 JoinQuant 聚宽平台中,query 函数底层使用的是 SQLAlchemy。要在 filter 中实现“包含”或者模糊查询,你可以使用 SQLAlchemy 提供的 .like() 方法,并结合 SQL 的通配符 %

针对你的需求,只需要将原来的精确匹配 == 改为 .like('%' + shareholder_name + '%') 即可。

修改后的完整代码示例

def get_institution_hold_sec(shareholder_name, date):
    from jqdata import finance
    from jqdata import query
    
    # 使用 .like() 方法,并在字符串前后加上 '%' 通配符
    q = query(finance.STK_SHAREHOLDER_FLOATING_TOP10).filter(
        finance.STK_SHAREHOLDER_FLOATING_TOP10.shareholder_name.like('%' + shareholder_name + '%'),
        finance.STK_SHAREHOLDER_FLOATING_TOP10.pub_date >= date
    ).limit(2000)
    
    all_data2 = finance.run_query(q)
    
    # 提取需要的列
    data = all_data2[['company_name','code','end_date','pub_date','shareholder_name','shareholder_rank','shareholder_class','share_number','share_ratio','sharesnature']]
    
    # 重命名列名
    data.columns = ['股票名称','股票代码','截止日期','公告日期','股东名称','股东名次','股东性质','持股数量','占总股本比例%','股份性质']
    
    return data

# 测试模糊查询
shareholder_name = '中央汇金'
date = '2018-09-30'
result_df = get_institution_hold_sec(shareholder_name, date)
print(result_df)

核心知识点解析

  1. .like() 方法:这是 SQLAlchemy 中用于执行 SQL LIKE 操作的函数。它允许你进行模式匹配。
  2. % 通配符:在 SQL 中,% 代表零个、一个或多个任意字符。
    • like('%中央汇金%'):表示只要字符串中间包含“中央汇金”四个字,无论前后有什么字符,都会被匹配到(例如“中央汇金投资有限责任公司”)。
    • like('中央汇金%'):表示匹配以“中央汇金”开头的字符串。
    • like('%中央汇金'):表示匹配以“中央汇金”结尾的字符串。

通过这种方式,你就可以非常灵活地在聚宽的财务和宏观数据库中进行文本的模糊搜索了。