あなたの代わりに1947年-1947として保存された日付を持っている場合、私はあなたがその結果を取得したい見ることができる唯一の方法は次のとおりです。
with t (Date1, Date2) as (
select date '2016-06-15', add_months(date '2016-06-15', -12*level)
from dual
connect by level <= 80
union all
select date '2016-06-15', date '-1947-06-15'
from dual
)
select * from t
where (Date1 - Date2)/365.25 >= 75;
DATE1 DATE2
---------- ----------
06/15/2016 06/15/1941
06/15/2016 06/15/1940
06/15/2016 06/15/1939
06/15/2016 06/15/1938
06/15/2016 06/15/1937
06/15/2016 06/15/1936
06/15/2016 06/15/1947
最後のレコードはそこには存在しないように見えます。しかし、私のNLS_DATE_FORMATマスクはMM/DD/YYYY(あなたが見ているものと一致する)です。
alter session set nls_date_format = 'MM/DD/SYYYY';
with t (Date1, Date2) as (
select date '2016-06-15', add_months(date '2016-06-15', -12*level)
from dual
connect by level <= 80
union all
select date '2016-06-15', date '-1947-06-15'
from dual
)
select * from t
where (Date1 - Date2)/365.25 >= 75;
DATE1 DATE2
------------- -------------
6/15/ 2016 6/15/ 1941
6/15/ 2016 6/15/ 1940
6/15/ 2016 6/15/ 1939
6/15/ 2016 6/15/ 1938
6/15/ 2016 6/15/ 1937
6/15/ 2016 6/15/ 1936
6/15/ 2016 6/15/-1947
あるいはさらに良い:私はそれが今年の兆候を示して作る場合には、より理にかなって
with t (Date1, Date2) as (
select date '2016-06-15', add_months(date '2016-06-15', -12*level)
from dual
connect by level <= 80
union all
select date '2016-06-15', date '-1947-06-15'
from dual
)
select to_char(date1, 'SYYYY-MM-DD') as date1, to_char(date2, 'SYYYY-MM-DD') as date2
from t
where (Date1 - Date2)/365.25 >= 75;
DATE1 DATE2
----------- -----------
2016-06-15 1941-06-15
2016-06-15 1940-06-15
2016-06-15 1939-06-15
2016-06-15 1938-06-15
2016-06-15 1937-06-15
2016-06-15 1936-06-15
2016-06-15 -1947-06-15
ですから、-1947から日付を見ることができる示すが、1947年からの日付れますそうではありません。そして、それは75年以上前にたくさんある:
select months_between(date '2016-06-15', date '-1947-06-15')/12 as years from dual;
YEARS
----------
3963
自分の価値観を中心にto_date()
を追加する理由は登場するレコードはあなたが暗黙的に日付を文字列に変換してから戻って日付をするだろうということです停止しました同じMM/DD/YYYY
形式のマスクを使用します。中間の文字列はでなく、にはマイナス記号が含まれているので、date '-1947-06-15'
は06/15/1947
という文字列になります。それが日付に変換されると、符号はまだ失われており、文字列06/15/1947
はdate '1947-06-15'
になります。 3963年前ではなく、今はわずか69年前です。
実際に計算された計算結果を見てきましたか?あなたはあなたのフィルターに合ったような特定の日付をつけられますか?そして...古い日付が間違った世紀ではなく1947年であることを確信していますか?あなたは4桁の年月日を照会/表示していますか(マイナス記号を許可していますか、 'SYYYY')? –
これらはデータベース内の日付で、Date1は6/15/1947で、Date2は6月15日で、月と日はありません。部分日付を入力するとmy dbがこれらの値をとるようです。私は正直なところ、なぜそれがうまくいかず、ちょうどto_date関数を試してみて、それがうまくいくように思っていませんでした。初期のクエリが機能しなかった理由をまだ理解できませんか? – Skn
すでに日付であれば、 'to_date()'は使用しないでください。年が-1947として入力されていないと確信していますか? 'date2 = to_date( ' - 1947-06-15'、 'SYYYY-MM-DD')'のテーブルを照会します。 –