0

我的代码在我的 mysql 数据库中的给定时间执行以下更新:

" UPDATE client_registration "  +
" SET registration_date = NOW() "  +
" WHERE cycle <= str_to_date(\"" + now + "\",'%d/%m/%Y %H:%i') "; 

但是,我有一个单元测试尝试在 HSQL 数据库上执行此更新,并且收到以下错误消息:user lacks privilege or object not found: STR_TO_DATE.

某种方式来执行WHERE cycle_start <= str_to_date(\"" + now + "\",'%d/%m/%Y %H:%i')mysql 数据库和 hsql 数据库的条件?

4

2 回答 2

0

您必须为 HSQL 重新编写查询:

" UPDATE client_registration "  +
" SET registration_date = NOW() "  +
" WHERE cycle <= current_timestamp"; 

如何在 hsqldb 中执行“选择 current_timestamp”?

于 2020-07-21T20:34:15.690 回答
0

如果要在 MySQL 和 HSQLDB 上运行完全相同的查询,则需要在 HSQLDB 上创建 STR_TO_DATE 函数。您还需要在查询中使用单引号字符:(str_to_date('" + now + "','%d/%m/%Y %H:%i')此引用遵循 SQL 标准)。

如果您使用 SQL 标准格式“YYYY-MM-DD hh:mm:ss”(例如“2020-07-21 14:30:00”)作为“现在”变量和使用的格式字符串,则更容易mysql。在这种情况下,HSQLDB 函数被简单地创建为:

CREATE FUNCTION STR_TO_DATE(STR VARCHAR(30), FORMAT VARCHAR(40) ) 
 RETURNS TIMESTAMP
 RETURN CAST(STR AS TIMESTAMP);

连接到数据库时执行一次 CREATE FUNCTION 语句,您可以在所有查询和 upade 语句中使用它。

于 2020-07-21T21:51:32.443 回答