Mam pola datownika i chcę porównać datę jego część w mojej kwerendy w OracleOracle porównując datownik z datą
Jak mam to zrobić,
SELECT *
FROM Table1
WHERE date(field1) = '2012-01-01'
Mam pola datownika i chcę porównać datę jego część w mojej kwerendy w OracleOracle porównując datownik z datą
Jak mam to zrobić,
SELECT *
FROM Table1
WHERE date(field1) = '2012-01-01'
Można truncate data część:
select * from table1 where trunc(field1) = to_date('2012-01-01', 'YYYY-MM-DD')
Problem z tego podejścia jest to, że każdy indeks field1
nie byłyby wykorzystywane ze względu na wywołaniu funkcji.
Alternatywnie (i bardziej przyjazny index)
select * from table1
where field1 >= to_timestamp('2012-01-01', 'YYYY-MM-DD')
and field1 < to_timestamp('2012-01-02', 'YYYY-MM-DD')
Możesz skrócić datę
SELECT *
FROM Table1
WHERE trunc(field1) = to_Date('2012-01-01','YYY-MM-DD')
Spójrz na SQL Fiddle po więcej przykładów.
to_date
format pracował dla mnie. Proszę wziąć pod uwagę formaty daty: MON-
, MM
, .
, -
.
t.start_date >= to_date('14.11.2016 04:01:39', 'DD.MM.YYYY HH24:MI:SS')
t.start_date <=to_date('14.11.2016 04:10:07', 'DD.MM.YYYY HH24:MI:SS')
Nie należy ** polegać na niejawnej konwersji danych. ''2012-01-01'' nie jest datą, jest dosłowne. Powinieneś zawsze używać 'to_date()' lub literki ANSI DATE, aby upewnić się, że twój SQL nie łamie się, gdy ustawienia NLS są różne. –