あなたは、全く文字列にしてからsysdate
を変換すべきではない - ORA-018611エラーの原因となっているものです。あなたのNLS_DATE_FORMATはYYYYMMDD
ではありません。あなたは明示的に、あなたのNLS設定が現在あるものは何でも使用して、日付に戻って、結果の文字列を変換しようとすると、その形式に日付を変換します。
は
select to_date(to_char(sysdate, 'YYYYMMDD')) from dual;
ORA-01861: literal does not match format string
select to_date(to_char(sysdate, 'YYYYMMDD'), 'YYYYMMDD') from dual;
TO_DATE(T
---------
13-APR-17
しかし、その代わりにあなただけのtrunc(sysdate)
を使用することができます。その時間は深夜0時に戻ってくるので、今日はWEB_STR_DT
と表現すれば一致します。
しかし、それだけでは問題ではありません。最初に日付を数値として格納するべきではありませんが、20170413
のような数値を日付に変換する必要がある場合は、最初に文字列に変換してからその文字列を日付に変換する必要があります。
基本的に間違った場所にかっこを持っている、との代わりに、
TO_DATE(TO_CHAR(T1.WEB_STR_DT, 'YYYYMMDD'))
あなたが持っている必要があります。
TO_DATE(TO_CHAR(T1.WEB_STR_DT), 'YYYYMMDD')
あなたのコードは、相当やっている:
select to_date(to_char(20170413, 'YYYYMMDD')) from dual;
ORA-01481: invalid number format model
を数値を文字列に変換するために日付形式のモデル要素を使用しようとしているからです。その括弧を動かすと、同じ日付になります。
だから、あなたが行うことができます:
TRUNC(SYSDATE) BETWEEN TO_DATE(T1.WEB_STR_DT, 'YYYYMMDD')
AND TO_DATE(T1.WEB_STR_DT, 'YYYYMMDD') + 30
:あなたがそうであっても単純になり、それらのための書式モデルを供給されていないので
TRUNC(SYSDATE) BETWEEN TO_DATE(TO_CHAR(T1.WEB_STR_DT), 'YYYYMMDD')
AND TO_DATE(TO_CHAR(T1.WEB_STR_DT), 'YYYYMMDD') + 30
でも明示的TO_CHAR()
呼び出しは、少し不要です
「TO_CHAT」?二倍?本当に? –