元编程提示列名不存在

我在做一个sqlUpdate的测试,用了元编程生成where条件,但是提示我报错:

::evaluate(sqlUpdate(t1, u, , w)) => Unrecognized column name date(date)

代码如下:

t1=table(`A`A`B`B as symbol, 2021.04.15 2021.04.16 2021.04.15 2021.04.16 as date, 12 13 21 22 as price)
updCol = `price
dateCol = `date
u = sqlColAlias( expr(sqlCol(updCol), +, -1) , updCol )
w = expr(sqlCol("date("+dateCol+")"), ==, 2021.04.15)
sqlUpdate(table=t1 ,updates=u ,where = w).eval()

这是哪里写的有问题?

请先 登录 后评论

1 个回答

Feng Gao

sqlCol的第一个参数是列名,虽然,sqlCol("date("+dateCol+")"),这种写法执行出来的结果是:

< date(date) >

看起来好像没什么问题,但是解析的时候,会将“date(date)”作为一个列名来解析

正确的使用方法是:sqlCol(dateCol, date),这样解析出来的结果是:

< date(date) as date >

这个就是把date作为一个列名,而后面的date是函数,是对date列作取日期操作,完整代码如下:

t1=table(`A`A`B`B as symbol, 2021.04.15 2021.04.16 2021.04.15 2021.04.16 as date, 12 13 21 22 as price)
updCol = `price
dateCol = `date
u = sqlColAlias( expr(sqlCol(updCol), +, -1) , updCol )
w = expr(sqlCol(dateCol, date), ==, 2021.04.15)
sqlUpdate(table=t1 ,updates=u ,where = w).eval()



请先 登录 后评论