0

1 つの列 (txn_issue_dt) は char で、issue_dt は日付で、2 つを比較しようとしていますが、独学で困惑しています。助けてください。

SELECT ptf.carrid,
       ptf.cov_effdt,
       ptf.cvg_id,
       ptf.err_msg,
       ptf.error_id,
       ptf.fine_dt,
       ptf.fine_id,
       ptf.fine_status,
       ptf.polnbr,
       ptf.txn_code,
       ptf.txn_type,
       ptf.rcvd_dt
FROM   policy_tracking_fine_view ptf
       INNER JOIN canc_rein cr ON cr.polnbr = ptf.polnbr
WHERE  ptf.txn_code = '05'
AND    ptf.fine_type = 'L'
AND    ptf.fine_status_descrip NOT IN ('SUSPENDED', 'VOID')
AND    TO_CHAR (ptf.txn_issue_dt, 'yy-mon-dd') = TO_DATE (cr.issue_dt, 'mm/dd/yy');

ORA-01481: 無効な数値フォーマット モデルと ORA-01861: リテラルがフォーマット文字列と一致しません

4

2 に答える 2

1

2 つの日付を比較する場合、両方が DATE データ型であることが最適です。

両方の列がすでに DATE データ型である場合は、それらの変換について心配する必要はありません (ただし、日付を日/月/年/時間などの開始に TRUNC() する必要があるかどうかについて心配する必要があるかもしれません)。 ); それらをDATEとして比較することができます。

1 つ以上の列が文字列の場合、TO_DATE を使用して行うことができる DATE データ型に変換する必要があります。

したがって、クエリでは、変更する必要があるようです

AND TO_CHAR (ptf.txn_issue_dt, 'yy-mon-dd') = TO_DATE (cr.issue_dt, 'mm/dd/yy')

AND TO_DATE (ptf.txn_issue_dt, 'yy-mon-dd') = cr.issue_dt

明らかに、文字列としての日付列の形式によって、使用する形式マスクが決まります。データの年が 2 桁のように見えますか? (2000 年問題は起こらなかったようです...) もしそうなら、'rr-mon-dd' のフォーマット マスクを使用したほうがよいかもしれません。年の上二桁です。

例えば。文字列の日付が「23/08/2015」のように見える場合は、そうしますTO_DATE(ptf.txn_issue_dt, 'dd/mm/yyyy')

注意。すでに DATE データ型になっているものに対して TO_DATE() を実行しないでくださいOracle は、デフォルトの nls_date_format パラメータに依存する暗黙的な変換をバックグラウンドで行う必要があるため、潜在的なバグを導入しました。これにより、エラーが発生したり、誤った日付が返されたりする可能性があります。

alter session set nls_date_format = 'dd/mm/yy hh24:mi:ss';

select to_char(to_date(sysdate, 'dd/mm/yyyy hh24:mi:ss'), 'dd/mm/yyyy hh24:mi:ss') dt from dual;

DT                 
-------------------
25/08/0015 12:25:20
于 2015-08-25T16:12:13.293 に答える
0

文字を文字 (txt_issue_dt) に変換し、日付を日付に変換しています。常に同じデータ型に変換するため、データ型が異なる場合は、一方を同じにして他方を変換します。あなたの場合:

TO_DATE(ptf.txn_issue_dt,'') = cr.issue_dt

したがって、txn_issue_dt の内容が 2015-APR-01 のようなものである場合は、比較の左側にフォーマット マスクとして「yyyy-MON-dd」を入力します。

列名の前後に関数を配置すると、そのテーブルでのインデックスの使用が無効になることに注意してください。したがって、私の例では、txn_issue_dt のインデックスは SQL インタープリターによって使用されません。

于 2015-08-25T16:11:20.423 に答える