Informixデータベースを使用しています。2つの日付の差を取得したいのですが、戻り値のデータ型は整数である必要があります。SQLは次のようになります。
select (today - to_date('20121201','%Y%m%d')) from your_table_name
ただし、SQLを実行すると、45が返され、計算値は整数型ではありません。値の日付型は何ですか?値を整数にキャストするにはどうすればよいですか?
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
2つの日付の差は整数である必要があります。INTERVAL
値の差を計算するときにのみ取得する必要がありDATETIME
ます。
現在、Informixインスタンスは手元にありませんが、このto_date()
関数を使用するとDATETIME
数学が得られると思います。
あなたが解決策を思いついたことがわかりますが、次のことを試してください。これははるかに簡単です。
SELECT today - TO_DATE('20121201', '%Y%m%d')::DATE AS td FROM tb_dis_controll