2

Informixデータベースを使用しています。2つの日付の差を取得したいのですが、戻り値のデータ型は整数である必要があります。SQLは次のようになります。

select (today - to_date('20121201','%Y%m%d'))  from your_table_name

ただし、SQLを実行すると、45が返され、計算値は整数型ではありません。値の日付型は何ですか?値を整数にキャストするにはどうすればよいですか?

4

2 に答える 2

1

TO_DATE 関数は Oracle インポートであり、Oracle で Oracle DATE 型を返します (名前の由来) が、Oracle DATE 型は Informix DATETIME 型に対応します。そのため、TO_DATE() 関数の Informix 実装は DATETIME 型を返します。

問題

SELECT TODAY AS TODAY,
       TO_DATE('20121201', '%Y%m%d') AS raw_to_date,
       (TODAY - TO_DATE('20121201','%Y%m%d')) AS raw_difference
  FROM sysmaster:informix.sysdual;

today       raw_to_date                   raw_difference
DATE        DATETIME YEAR TO FRACTION(5)  INTERVAL DAY(8) TO DAY
2013-01-16  2012-12-01 00:00:00.00000     46

解決

式の解決策は、DATE 関数を TO_DATE の出力に適用するか、DATE 型にキャストすることです。

SELECT DATE(TO_DATE('20121201', '%Y%m%d'))          AS date_to_date,
       CAST(TO_DATE('20121201', '%Y%m%d') AS DATE)  AS cast_to_date,
            TO_DATE('20121201', '%Y%m%d')::DATE     AS colon_to_date,
       (TODAY - DATE(TO_DATE('20121201','%Y%m%d'))) AS date_difference
  FROM sysmaster:informix.sysdual;

date_to_date  cast_to_date  colon_to_date  date_difference
DATE          DATE          DATE           INTEGER
2012-12-01    2012-12-01    2012-12-01     46
于 2013-01-16T23:48:14.577 に答える
0

2つの日付の差は整数である必要があります。INTERVAL値の差を計算するときにのみ取得する必要がありDATETIMEます。

現在、Informixインスタンスは手元にありませんが、このto_date()関数を使用するとDATETIME数学が得られると思います。

あなたが解決策を思いついたことがわかりますが、次のことを試してください。これははるかに簡単です。

SELECT today - TO_DATE('20121201', '%Y%m%d')::DATE AS td FROM tb_dis_controll
于 2013-01-15T12:20:21.093 に答える