类型化日期时间差异

时间:2012-10-19 15:38:19

标签: sql sql-server oracle firebird

我们使用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)完成同样的事情?

感谢

3 个答案:

答案 0 :(得分:0)

firebird上没有CONVERT。

使用CAST:

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

答案 1 :(得分:0)

对于Firebird,您需要使用DATEDIFF来获取两个时间戳(日期时间)之间的差异。此BTW类似于SQL Server DATEDIFF。如果您希望将其强制转换为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,您可能需要查看UDF库,例如FreeAdhocUDF(特别是F_SECONDS2PERIOD)或rFunc UDF。如果所有其他方法都失败了,您可以编写自己的UDF。

答案 2 :(得分: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 Function

的链接