【问题标题】:str_to_date mysql does not run in hsqlstr_to_date mysql 不在 hsql 中运行
【发布时间】:2020-11-11 07:20:19
【问题描述】:

我的代码在给定时间在我的 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

mysql数据库和hsql数据库执行条件WHERE cycle_start &lt;= str_to_date(\"" + now + "\",'%d/%m/%Y %H:%i')的方法?

【问题讨论】:

  • 所以你尝试执行与 MySQL 和 HSQL 相同的查询?
  • Java 代码中的now 变量是什么?是什么类型的?
  • Mysql 是我的默认银行,而 hsql 我用作内存银行来执行我的测试。
  • 现在是使用 SimpleDateFormat 转换为字符串的日期

标签: java mysql hsqldb primavera


【解决方案1】:

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

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

How to do "select current_timestamp" in hsqldb?

【讨论】:

    【解决方案2】:

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

    如果您对“now”变量和格式字符串使用 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 语句中使用它。

    【讨论】:

      猜你喜欢
      • 2014-10-23
      • 2013-07-19
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 2014-08-03
      相关资源
      最近更新 更多