2

MySQL的 time_to_sec() 有模拟吗?

我注意在 H2 数据库上执行如下查询:

select * from order
join timmingSettings on order.timmingSettings = timmingSettings.id
where (order.time-timmingSettings.timeout) < current_timestamp
4

4 回答 4

5

不,但如果需要,向 h2 添加功能似乎很容易。

要将时间戳转换为自纪元以来的秒数,请编译 Java 类并将其添加到 h2 的类路径中,其中包含:

public class TimeFunc
{
  public static long getSeconds(java.sql.Timestamp ts)
  {
    return ts.getTime() / 1000;
  }
}

然后可以使用 CREATE ALIAS 在 h2 中链接 Java 代码中的函数:

CREATE ALIAS TIME_SECS FOR "TimeFunc.getSeconds";

SELECT TIME_SECS(CURRENT_TIMESTAMP);

产生:

TIME_SECS(CURRENT_TIMESTAMP())  
1255862217
(1 row, 0 ms)
于 2009-10-18T10:41:21.533 回答
2

代替向 H2 添加函数,您可以将日期转换为 timsestamp,然后根据http://www.h2database.com/html/functions.html使用 formatdatetime 。或者,转换为字符串并使用 parsedatetime。两者的例子如下:

-- to convert using parsedatetime, done_on stores 
select parsedatetime(done_on, 'ssss', 'en', 'Europe/Dublin');
-- for this example, assume done_on stores a timestamp
-- to convert using formatdatetime
select formatdatetime(done_on, 'ssss', 'en', 'Europe/Dublin');

有效时区可以在您的 /usr/share/zoneinfo 目录中找到,语言代码在http://en.wikipedia.org/wiki/ISO_639-1的列表中——ISO 639 第 1 部分标准。

于 2012-09-07T21:56:54.120 回答
2

我认为这是最简单的代码。

select DATEDIFF('second',timestamp '1970-01-01 00:00:00' ,  CURRENT_TIMESTAMP())
于 2015-10-24T10:14:57.687 回答
0
SELECT EXTRACT (EPOCH FROM <value>)

所以

select * from order join timmingSettings on order.timmingSettings = timmingSettings.id where (extract(epoch from order.time)-extract(epoch from timmingSettings.timeout)) < extract(epoch from current_timestamp)

于 2018-06-11T11:28:55.037 回答