2016-06-29 13 views
0

私は、非常に便利なTIMESTAMPINTERVAL算術を持つPostgreが見つかりました。しかし、この魔法には、クエリを実行するときに検出するトリッキーも含まれています。PostgreSQLでINTERVALが相対または絶対であることを確認する方法

質問です:

INTERVAL相対または Postgreで絶対であるかどうかを判断する方法はありますか?

レットは、いくつかは次のようにエンコードされ、私はそれにさまざまなINTERVAL sの列を持っていると言う相対'1 mon')他は絶対'30 days')として符号化されます。

相対INTERVALは絶対INTERVALに変換可能でなければなりませんので、我々はそれらを直接比較することはできません。

SELECT '1 mon'::INTERVAL = '30 days'::INTERVAL; 

TRUEを返しますので、我々は区別することができません。

相対INTERVAL週がよく定義されている最大のグラニュラリティであるため、週より上のグラニュラリティが発生します。そのようなテストは満足のいくものではない:

SELECT some_interval > '1 week'; 

'21 days'::INTERVAL代わり絶対相対として検出falsyので。

TIMESTAMPを使用すると、演算結果が異なる結果になることが、相対値と絶対値の1つの違いであることが分かります。INTERVAL

SELECT '2000-02-01'::TIMESTAMP + '1 mon'::INTERVAL; 
SELECT '2000-02-01'::TIMESTAMP + '30 days'::INTERVAL; 

第戻り'2000-03-01'::TIMESTAMPと明らかに異なっており、後者の戻り'2000-03-02'::TIMESTAMP、。

しかし、これは算術演算のいくつかの組み合わせを生成することによって相対性をチェックするのがやや奇妙に見えますが、'1 week'::INTERVAL'7 days'::INTERVALを区別することはできません(ただし、 )。

だから、私は内蔵のまたは自家製FUNCTIONINTERVALPostgreにおける相対絶対であるかどうかを検出することができますを探しています。何か案が?あなたは「相対的」(すべての月は年の日数と同じ数と同じものを持っていないため)、「月」または「年」が含まれているタイムスタンプがある呼び出し何

+0

この区別の目的は何ですか? –

+0

@ClodoaldoNeto、どういう意味ですか? – jlandercy

+0

なぜ、あなたは相対的なものと絶対的なものとを区別する必要があるのですか? –

答えて

1

あなたは、文字列comparaisonことによってそれをテストすることができます。

SELECT 
    my_interval 
    ,my_interval::TEXT SIMILAR TO '%(mon|year)%' AS mytest 
FROM my_table 
+0

より高いタイプの問題を解決する際に文字列キャストを使用することに熱心ではありませんが、この場合、これを行うのが最もクリーンな方法でなければなりません。これを指摘していただきありがとうございます。 – jlandercy

関連する問題