2012-05-03 34 views
17

En Oracle 10g tuve un problema al usar DATE escriba en mi tabla. Solo quiero que mi tienda de campo DATE solo DATE sin tiempo automáticamente.Tipo de fecha sin tiempo en Oracle

Hay tanta solución, sé que como el uso de TO_CHAR y TO_DATE o TRUNC pero enfrentado que estoy usando tanto los procedimientos para insertar o actualización de los datos y no tienen tiempo para actualizar todos ellos.

¿Cómo podría resolver este problema?

+0

personalmente todavía uso el tipo de fecha y restablecer el tiempo a 0. – ericosg

+0

@ericosg ¿cómo se puede restablecer el tiempo a 0? –

+1

Creo que Rob van Wijk respondió bastante bien – ericosg

Respuesta

23

La mejor solución sería:

  1. quitar todo momento desde su columna DATE (update yourtable set yourdatecolumn = trunc(yourdatecolumn))

  2. asegurar que todas las fechas futuras contienen ningún momento parte mediante la colocación de una restricción de comprobación en la columna usando check (yourdatecolumn = trunc(yourdatecolumn))

  3. ajuste todas sus instrucciones INSERT y UPDATE o, si tiene suerte, ajuste su API para que solo inserte las fechas TRUNCed.

La solución más fácil sería:

  1. (opcional) eliminar todo momento de su columna FECHA.

  2. Crear un trigger Insertar fila antes o actualización que establece :new.yourdatecolumn := trunc(:new.yourdatecolumn);

+0

Muchas gracias, la mejor solución para mí es: actualice primero la columna DATE y luego agregue el activador antes de insertar una fila :) –

+0

Tiene razón. Cambié el orden –

+1

Tenga en cuenta que cuando algunas versiones agregan la restricción de verificación en el plan de ejecución (por ejemplo, si dijo "donde yourdatecolumn = ...") pueden calcular una estimación de cardinalidad incorrectamente pequeña como resultado. Creo que era 10.1 –

-3

yo uso como esto

inserción: Insert into table (name_date) values(to_date(current_date,'dd/mm/yyyy')); actualización: update table set name_date=to_date(current_date,'dd/mm/yyyy') where id=1;

eso es todo ...

Cuestiones relacionadas