H2数据库。如何在sql中将日期转换为秒?

时间:2009-10-18 09:53:14

标签: sql h2

是否存在MySQL time_to_sec()的模拟?

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

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

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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部分标准。

答案 2 :(得分:2)

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

select DATEDIFF('second',timestamp '1970-01-01 00:00:00' ,  CURRENT_TIMESTAMP())

答案 3 :(得分:0)

SELECT EXTRACT (EPOCH FROM <value>)

所以

  

从订单中选择*   在order.timmingSettings = timmingSettings.id上加入timmingSettings   where(extract(order from order.time)-extract(epimming from timmingSettings.timeout))&lt;提取(来自current_timestamp的纪元)