to_date
AS400 データベースではオペレーターを使用できないため、このメールをお送りしています。
Oracle データベースでは、以下を使用します。
datefield >= to_date('01/01/2014','DD/MM/YYYY')
しかし、AS400 ではエラーが発生します。
互換性のない演算子
置き換えるために使用できる別の機能はありますto_date
か?
to_date
AS400 データベースではオペレーターを使用できないため、このメールをお送りしています。
Oracle データベースでは、以下を使用します。
datefield >= to_date('01/01/2014','DD/MM/YYYY')
しかし、AS400 ではエラーが発生します。
互換性のない演算子
置き換えるために使用できる別の機能はありますto_date
か?
このトピックが古いことは承知していますが、現在の回答は TO_DATE の元の問題をほとんど無視しているように見え、代わりに回避策を提供しています。もちろん、回避策はIMOであり、より良いアプローチです。メッセージ識別子を追加し、元の問題と考えられる解決策の詳細な説明を追加することで、他の人がこのディスカッションを自分の問題と一致するものとして見つけ、追加のコメントを提供するのに役立つことを願っています.
OP で説明されている問題は、TO_DATE スカラーのデータ型が TIMESTAMP であるのに対し、DateField 列のデータ型が DATE であることを診断するエラー状態 SQL0401 [sqlcode -401] の反映です [またはそのように暗示されていますが、 OPにはTABLEのDDLが含まれていたため、レビュー担当者は、「datefield」が実際にDATEデータ型の列であることを確信できました]。
v5r3 では、「原因」は「日付、時刻、およびタイムスタンプ オペランドは、文字オペランドまたは同じタイプの別のオペランドと互換性があります。」というテキストで説明されています。FWiW USEnglish [first-level] テキストは、OP に記載されているように、単に「互換性のない演算子」ではなく、「比較演算子 >= オペランドに互換性がありません。」である可能性があります。v7r1 でも、ドキュメントは SQL0401 の変更を示唆していません:
http://www.ibm.com/support/knowledgecenter/ssw_ibm_i_71/rzala/rzalaml.htm
「...
日付、時刻、およびタイム・スタンプのオペランドは、文字オペランドおよびグラフィック・オペランド、または同じタイプの別のオペランドと互換性があります
。...」
スカラー関数の名前にもかかわらず、そのモニカが与えられた論理的な効果のように見えるかもしれませんが、スカラー結果はDATE データ型ではありません。代わりに、効果はスカラー関数名 TIMESTAMP_FORMAT を反映しているため、TIMESTAMP スカラー結果が得られます。モニカ TO_DATE は単なる同義語\syntax-alternative:
http://www.ibm.com/support/knowledgecenter/api/content/ssw_ibm_i_71/db2/rbafzscatsformat.htm
datefield >= to_date('01/01/2014','DD/MM/YYYY')
非標準の日付形式がコーディングされている最初に説明されたシナリオでは、その TO_DATE スカラーの結果を明示的に DATE 型にキャストすることでエラーを防ぐことができます。たとえば、TO_DATE の結果を別の [キャスト] スカラー (たとえば、DATE キャスト スカラー
datefield >= DATE(to_date('01/01/2014','DD/MM/YYYY'))
または CAST スカラーのいずれか) でラップすることによってdatefield >= CAST(to_date('01/01/2014','DD/MM/YYYY') as DATE)
もちろん、標準の日付形式の 1 つとしてフォーマットされた文字列を使用する他の選択肢 [例えば、Charles が提案した *ISO] はおそらく同じくらい簡単です。その使用法が、TO_DATE() の 2 番目の引数として指定されたformat-stringほど明示的に [ステートメントのレビュー担当者に] 明らかにならない場合でも。ただし、当初は「DD/MM/YYYY」と表示されていた仕様によると、形式が「DD.MM.YYYY」である *EUR 標準形式を使用することが優先される場合があります。つまり、次のようにコード化されますdatefield >= '01.01.2014'
日付文字列のドキュメント リファレンスhttp://www.ibm.com/support/knowledgecenter/ssw_ibm_i_71/db2/rbafzdatestrings.htmに加えて、そのページには記載されていない別の代替手段があります。これは、* のやや冗長な形式です。 ISO形式の文字列で、DATE '2014-01-01'
[仕様、冗長性ともにほぼ同じ。DATE('2014-01-01')
別の方法では、このトピックの他の場所で既に説明した DATE [キャスト] スカラー指定として、かっこ] を入力するだけで済みます。したがって、datefield >= DATE'2014-01-01'
またはdatefield >= '2014-01-01'
またはのdatefield >= DATE('2014-01-01')
それぞれはすべて同等であり、それぞれが日付表現としての文字列の *ISO フォーマットに依存しています。