oracle - veces - insertar fecha en formato dd/mm/yyyy en sql server
El formato de fecha predeterminado de Oracle es AAAA-MM-DD, ¿POR QUÉ? (12)
El formato de fecha predeterminado de Oracle es AAAA-MM-DD. Lo que significa que si lo hago:
select some_date from some_table
... Perdí la porción de tiempo de mi cita.
Sí, sé que puedes "arreglarlo" con:
alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss'';
Pero en serio, ¿por qué no lo anterior es el predeterminado? Especialmente en un DBMS donde los dos tipos principales de datos de seguimiento de tiempo (DATE y TIMESTAMP) tienen un componente de tiempo que incluye (al menos) precisión de hasta 1 segundo.
¡El mayor PITA de Oracle es que no tiene un formato de fecha predeterminado!
En su instalación de Oracle, la combinación de configuraciones regionales y opciones de instalación ha elegido (¡lo más sensato!) YYYY-MM-DD como el formato para dar salida a las fechas. Otra instalación podría haber elegido "DD / MM / YYYY" o "YYYY / DD / MM".
Si desea que su SQL sea portátil a otro sitio de Oracle, le recomendaría que siempre TO_CHAR(datecol,''YYYY-MM-DD'')
un TO_CHAR(datecol,''YYYY-MM-DD'')
o una función similar alrededor de cada columna de fecha en su SQL o que configure alternativamente el formato definitivo inmediatamente después de conectarse con
ALTER SESSION
SET NLS_DATE_FORMAT = ''DD-MON-YYYY HH24:MI:SS'';
o similar.
¿Estás seguro de que no confundes la base de datos Oracle con Oracle SQL Developer?
La base de datos no tiene formato de fecha, la fecha sale de la base de datos sin formato. Depende del software del cliente el renderizarlo, y SQL Developer usa YYYY-MM-DD como su formato predeterminado, lo cual es inútil, estoy de acuerdo.
editar: Como se comentó a continuación, SQL Developer se puede reconfigurar para mostrar los valores DATE correctamente, solo tiene valores predeterminados incorrectos.
El formato AAAA-MM-DD es parte de ISO8601 un estándar para el intercambio de información de fecha (y hora).
Es muy valiente para Oracle adoptar un estándar ISO como este, pero al mismo tiempo, es extraño que no hayan llegado al final .
En general, las personas se resisten a cualquier cosa diferente, pero hay muchas buenas razones internacionales para ello.
Sé que estoy diciendo cosas revolucionarias, pero todos deberíamos adoptar estándares ISO, incluso si lo hacemos un poco a la vez .
Este es un "problema" en el lado del cliente, no es realmente un problema de Oracle.
Es la aplicación del cliente la que formatea y muestra la fecha de esta manera.
En su caso, es SQL * Plus el que hace este formateo.
Otros clientes SQL tienen otros valores predeterminados.
La mayoría del IDE puede configurar la máscara predeterminada para algún tipo de datos como fecha, moneda, separador decimal, etc.
Si está utilizando Oracle SQL Developer :
Herramienta> Preferencias> Base de datos> NLS
Formato de fecha: AAAA-MM-DD HH24: MI: SS
No soy un usuario de Oracle (bueno, últimamente de todos modos), PERO ...
En la mayoría de las bases de datos (y en un lenguaje preciso), una fecha no incluye un tiempo. Tener una fecha no implica que esté indicando un segundo específico en esa fecha. Por lo general, si desea un horario y una fecha, eso se llama fecha y hora.
Nunca es aconsejable confiar en que los valores predeterminados se establezcan en un valor particular, en mi humilde opinión, ya sea para formatos de fecha, formatos de moneda, modos de optimización o lo que sea. Siempre debe establecer el valor del formato de fecha que necesita, en el servidor, el cliente o la aplicación.
En particular, nunca confíe en los valores predeterminados cuando convierta los tipos de fecha o de datos numéricos para fines de visualización, ya que un solo cambio en la base de datos puede dañar su aplicación. Siempre use un formato de conversión explícito. Durante años trabajé en sistemas Oracle donde el formato de visualización de fecha predeterminada fuera de la caja era MM / DD / RR, lo que me volvía loco, pero al menos me obligaba a usar siempre una conversión explícita.
Oracle tiene los tipos de datos Date y Timestamp.
Según la documentación de Oracle , existen diferencias en el tamaño de los datos entre Fecha y Marca de tiempo, por lo que cuando la intención es tener un campo de Solo fecha, tiene sentido mostrar el Formato de fecha. Además, "No tiene segundos fraccionarios ni zona horaria". - por lo que no es la mejor opción cuando se requiere información de marca de tiempo.
El campo de Fecha se puede formatear fácilmente para mostrar el componente de tiempo en Oracle SQL Developer. La consulta de fecha se ejecutó en PL / SQL Developer muestra el tiempo, pero no se muestra en Oracle SQL Developer . Pero no mostrará los segundos fraccionarios o la zona horaria, para esto necesita el tipo de datos Timestamp.
Para responder a su pregunta, es POR QUÉ la fecha predeterminada no muestra la parte TIME, la única respuesta que encuentro es
Los equipos de Oracle están compuestos por desarrolladores LAZY o responsables :-)
Por qué ?
¡Porque los tipos de datos DATE, TIME y DATETIME existen en SQL y Oracle aún no lo ha implementado!
Es una pena para Oracle.
Pero la respuesta correcta a su problema no es definir un formato predeterminado de FIX sino un formato predeterminado SIGNIFICATIVO que muestre solo dígitos significativos para que los valores de DATE, TIME o DATETIME que se muestran (de forma predeterminada) contengan siempre todos los dígitos importantes.
Ejemplo:
2015-10-14 will be displayed as 2015-10-14 (or default DATE format)
2018-10-25 12:20:00 will be displayed as 2018-10-25 12:20
1994-04-16 16 will be displayed as 1994-04-16 16
El principio es simple.
Todos los dígitos que forman parte de DATE siempre se mostrarán como parte INTEGER del número flotante. Para la parte TIME, solo se mostrará la parte significativa como para la parte DECIMAL en el número flotante. Naturalmente, para el tipo TIME (solo HH: MM: SS), la parte DATE nunca se muestra.
Si está utilizando esta consulta para generar un archivo de entrada para su Data Warehouse, entonces necesita formatear los datos de manera apropiada. Básicamente, en ese caso está convirtiendo la fecha (que sí tiene un componente de tiempo) en una cadena. Necesita formatear explícitamente su cadena o cambiar su nls_date_format para establecer el valor predeterminado. En su consulta, simplemente puede hacer:
select to_char(some_date, ''yyyy-mm-dd hh24:mi:ss'') my_date
from some_table;
Un valor de FECHA según el estándar SQL es AAAA-MM-DD. Entonces, aunque Oracle almacena la información de tiempo, creo que están mostrando el valor de una manera compatible con el estándar SQL. En el estándar, está el tipo de datos TIMESTAMP que incluye información de fecha y hora.
razón: si está mirando una columna de datos con una marca de tiempo, el _MOST_IMPORTANT_ bit de información es el año. Si los datos han estado en el DB por diez años, es importante saberlo. entonces el año viene primero.
tiene sentido que ese mes venga después, luego día, hora, minuto. Objetivamente, esta es la secuencia más lógica para que se muestren los datos de tiempo.
también tiene sentido que si va a mostrar los datos de forma predeterminada, debe mostrar solo la parte más importante de los datos, por lo tanto, solo YMD. se puede mostrar todo lo demás, pero no satura su informe SQL por defecto.
Ordenar por fecha es lógico si visualiza YMD porque es secuencial. Las computadoras son buenas en secuencia, y parece lógico.
finalmente. Su prejuicio para querer MDY es su predisposición. No todos, incluso en los Estados Unidos, usan este formato. Así que usa el formato más lógico y no te indignes cuando otros decidan ser lógicos por defecto.
(Soy estadounidense y no represento a Oracle. Sin embargo, puedo pensar por mí mismo)