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

为何DolphinDB函数中date对象触发「非XDB连接或函数」错误?

DolphinDB函数封装查询报错问题解决

问题场景

表定义

dt = 2025.01.01T01:01:51.100 2025.01.02T01:01:51.000 2025.01.03T04:01:51.900
sym = ["IBM", "MSFTN", "GOOGS"]
value = 1..3
t = table(dt, sym, value)

直接查询正常执行

day = "20250101"
date = temporalParse(day, "yyyyMMdd")
select * from t where date(dt) = date 
/*
执行结果:
dt                  sym  value
2025.01.01T01:01:51.100 IBM  1
*/

函数封装后触发错误

def myFunc(day, t) {
    date = temporalParse(day, "yyyyMMdd")
    return select * from t where date(dt) == date
}

myFunc("20250101", t) 
// 错误信息:The object '2025.01.01' is neither a XDB connection nor a function definition. RefId: S06006

错误码S06006表示调用了不可调用的对象,仅函数或XDB连接可被调用。

已尝试操作:

  • 确认函数外的直接查询逻辑正常运行
  • 验证temporalParse返回正确的DATE类型值(如2025.01.01)
  • 检查函数拼写与语法无问题

报错原因分析

函数内部定义的局部变量date优先级高于系统内置函数date()。执行date(dt)时,DolphinDB会将date解析为局部变量(值为2025.01.01,属于DATE类型的数值对象),而非系统内置的日期转换函数。由于数值对象无法被调用,因此触发S06006错误。

解决方案

方案1:修改局部变量名避免冲突

将函数内的变量名改为不与系统函数重名的名称,例如targetDate:

def myFunc(day, t) {
    targetDate = temporalParse(day, "yyyyMMdd")
    return select * from t where date(dt) == targetDate
}

myFunc("20250101", t)

方案2:使用全局作用域限定符调用系统函数

通过::强制指定调用全局作用域的系统函数,无需修改变量名:

def myFunc(day, t) {
    date = temporalParse(day, "yyyyMMdd")
    return select * from t where ::date(dt) == date
}

myFunc("20250101", t)

验证结果

修改后的函数执行后,将返回正确的查询结果:

dt                  sym  value
2025.01.01T01:01:51.100 IBM  1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 12:42:47