Date与DatatimeV2

Viewed 63

select * from tbname where adtime=DATE(NOW()),其中adtime是Date类型,DATE(NOW())是DatatimeV2 类型;查询语句是有结果的。删除却报错。
image.png

删除报错提示,意为两边日期类型不匹配。只是疑惑既然两边日期类型不匹配那么为什么查询可以出结果,删除语句却报错?还是说doris里不支持在delete里使用DATE(NOW())?
image.png

Caused by: java.sql.SQLException: errCode = 2, detailMessage = errCode = 2, detailMessage = Right expr of binary predicate should be value, predicate: `adtime` = CAST(date('2025-07-04 11:53:13') AS DATEV2), right expr type:DATEV2
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:763)
	at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648)
	at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:330)
	at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:131)
	... 11 more

3 Answers

我又尝试了一下,发现当表中的日期字段是datetime类型时,是可以在delete中正常使用date(now())的;表中字段是date类型时就不可以。

上面同仁指出的字面量问题,尝试了下cast,发现还是不可以,报同样的错误:
image.png

根据报错来看,不支持哈
Caused by: java.sql.SQLException: errCode = 2, detailMessage = errCode = 2, detailMessage = Right expr of binary predicate should be value, predicate: adtime = CAST(date('2025-07-04 11:53:13') AS DATEV2), right expr type:DATEV2

delete的等值条件需要字面量,date这里会留下一个无法常量折叠的函数,FE没法直接把它转换成字面量,所以是不行的。试下直接cast(xxx as date)作为值应该可以。