我们使用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)完成同样的事情?
感谢
答案 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;
的链接