1

ローカルテストデータベースとしてfirebirdを使用しており、ほとんどのクライアントはSQLServerまたはOracleを使用しています。

これはMSSQLServerでは機能しますが、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

Firebirdの場合DATEDIFF、2つのタイムスタンプ(日時)の差を取得するために使用する必要があります。このところで、SQLServerに似ています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にはそのようなオプションはありません。特にに変換する必要がある場合は、 FreeAdhocUDF(具体的には)やrFuncUDFhh:mi:ssなどのUDFライブラリを確認することをお勧めします。他のすべてが失敗した場合は、独自のUDFを作成できます。F_SECONDS2PERIOD

于 2012-10-19T16:18:52.350 に答える
0

火の鳥には変換はありません。

CASTを使用する:

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

于 2012-10-19T15:49:44.267 に答える
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 に答える