1

我们使用 firebird 作为本地测试数据库,我们的大多数客户使用 SQL Server 或 Oracle。

这适用于 MS SQL Server,但不适用于 Firebird。(还没有在 Oracle 上测试过)

CONVERT(char(8),MAX(p.end_Time)-MIN (p.start_Time),8) as duration

有没有办法为(Firebird、Oracle 和 MS Sql Server)完成同样的事情?

谢谢

4

3 回答 3

0

在 Oracle(Oracle 8i、Oracle 9i、Oracle 10g、Oracle 11g)上,您可以使用 to_char 函数:

   select to_char( value, [ format_mask ], [ nls_language ] ) ....

例子:

    SELECT TO_CHAR ( SYSDATE - TO_DATE ( '18-10-2012', 'dd-mm-yyyy' ), '9,999.99' ) as duration FROM   DUAL;

这是Oracle/PLSQL 的链接:To_Char 函数

于 2012-10-19T18:36:45.680 回答
0

firebird 上没有 CONVERT。

使用 CAST:

select cast(MAX(p.end_Time) as varchar(50))等等...

于 2012-10-19T15:49:44.267 回答
0

对于 Firebird,您需要使用DATEDIFF来获取两个时间戳(日期时间)之间的差异。这个 BTW 类似于SQL ServerDATEDIFF。如果你想把它转换成char,你可以使用CAST,例如CAST(DATEDIFF(DAY, MAX(p.end_Time), MIN(p.start_Time)) AS CHAR(8))应该做的伎俩(或者你可以简单地做CAST(MAX(p.end_Time) - MIN (p.start_Time) AS CHAR(8)),因为时间戳是可减去的。

我只是注意到您在您的选项中指定的选项CONVERT将转换为hh:mi:ss. Firebird 中没有这样的选项。如果您需要专门转换为hh:mi:ss,您可能需要查看诸如FreeAdhocUDF(特别是F_SECONDS2PERIOD)或rFunc UDF 之类的 UDF 库。如果一切都失败了,您可以编写自己的 UDF。

于 2012-10-19T16:18:52.350 回答