Ho un campo timestamp e voglio solo per confrontare la parte relativa alla data di esso nella mia query in OracleOracle a confronto timestamp con la data
Come faccio a farlo,
SELECT *
FROM Table1
WHERE date(field1) = '2012-01-01'
Ho un campo timestamp e voglio solo per confrontare la parte relativa alla data di esso nella mia query in OracleOracle a confronto timestamp con la data
Come faccio a farlo,
SELECT *
FROM Table1
WHERE date(field1) = '2012-01-01'
È possibile truncate la data parte:
select * from table1 where trunc(field1) = to_date('2012-01-01', 'YYYY-MM-DD')
il problema di questo approccio è che qualsiasi indice su field1
non sarebbe stato utilizzato a causa della chiamata di funzione.
In alternativa (e più accogliente index)
select * from table1
where field1 >= to_timestamp('2012-01-01', 'YYYY-MM-DD')
and field1 < to_timestamp('2012-01-02', 'YYYY-MM-DD')
È possibile troncare la data
SELECT *
FROM Table1
WHERE trunc(field1) = to_Date('2012-01-01','YYY-MM-DD')
sguardo al SQL Fiddle per ulteriori esempi.
formato to_date
ha funzionato per me. Si prega di considerare i formati della data: 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')
Si dovrebbe ** non ** contare sulla conversione dei dati implicita. "'2012-01-01'' non è una data, è un personaggio letterale. Devi sempre usare 'to_date()' o un valore letterale ANSI DATE per assicurarti che il tuo SQL non si interrompa quando le impostazioni di NLS sono diverse. –