transponer registros procedimiento multiple filas ejemplos ejecutar developer convertir comandos columns columnas auto_increment almacenado 11g oracle date

registros - ¿Cómo se almacenan las fechas en Oracle?



oracle transponer registros columnas (3)

¿Cómo se almacenan las fechas en Oracle? Por ejemplo, sé que la mayoría de los sistemas usan el tiempo de Época para determinar qué hora es. Calculando cuántos segundos hay desde el 1 de enero de 1970. ¿Oracle también lo hace?

La razón por la que estoy preguntando esto es que noté que si toma dos fechas en Oracle y las resta, obtiene un punto flotante de cuántos días quedan.

Ejemplo

(Sysdate - dateColumn)

devolvería algo como esto (dependiendo de la hora)

3.32453703703703703703703703703703703704

Ahora Oracle está haciendo la conversión y escupiendo ese formato, o ¿Oracle almacena fechas con cuántos días está lejos de un determinado marco de tiempo? (Como el tiempo de Época)


Del manual en http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements001.htm#sthref151

Para cada valor de DATE, Oracle almacena la siguiente información: año, mes, día, hora, minuto y segundo

Aparentemente, no está almacenando un valor de época que también está confirmado por este capítulo del manual :

La base de datos almacena las fechas internamente como números. Las fechas se almacenan en campos de longitud fija de 7 bytes cada uno, que corresponden a siglo, año, mes, día, hora, minuto y segundo


Son dos tipos 12 y 13

http://oraclesniplets.tumblr.com/post/1179958393/my-oracle-support-oracle-database-69028-1

Tipo 13

select dump(sysdate) from dual; Typ=13 Len=8: 220,7,11,26,16,41,9,0 The format of the date datatype is Byte 1 - Base 256 year modifier : 220 2 - Base 256 year : 256 * 7 = 1792 + 220 = 2012 3 - Month : 11 4 - Day : 26 5 - Hours : 16 6 - Minutes : 41 7 - Seconds : 09 8 - Unused

2012-11-26 16:41:09

Tipo 12

select dump(begindate) from tab; Typ=12 Len=7: 100,112,2,7,1,1,1 The format of the date datatype is byte 1 - century (excess 100) 100 - 100 = 00 byte 2 - year (excess 100) 112 - 100 = 12 byte 3 - month = 2 byte 4 - day = 7 byte 5 - hour (excess 1) 1 - 1 = 0 byte 6 - minute (excess 1) 1 - 1 = 0 byte 7 - seconds (excess 1) 1 - 1 = 0

0012-02-07 00:00:00


¿Cómo se almacenan las fechas en Oracle?

Los dos tipos de datos 12 y 13 son para dos propósitos diferentes.

  • Tipo 12 : fechas almacenadas en la tabla
  • Tipo 13 : fecha devuelta por las funciones de fecha internas, como SYSDATE / CURRENT_DATE , también al convertir un literal de cadena en fecha usando TO_DATE o ANSI Fecha literal DATE ''YYYY-MM-DD'' .

Casos de prueba:

Configuración básica de la tabla para el tipo 12 :

SQL> CREATE TABLE t(col DATE); Table created. SQL> INSERT INTO t SELECT SYSDATE FROM dual; 1 row created. SQL> COMMIT; Commit complete.

Verifique los diferentes casos:

SQL> SELECT DUMP(col) FROM t; DUMP(COL) -------------------------------------------------------------------------------- Typ=12 Len=7: 120,116,3,17,18,6,55 SQL> SELECT DUMP(SYSDATE) FROM dual; DUMP(SYSDATE) -------------------------------------------------------------------------------- Typ=13 Len=8: 224,7,3,17,17,5,54,0 SQL> SELECT DUMP(CURRENT_DATE) FROM dual; DUMP(CURRENT_DATE) -------------------------------------------------------------------------------- Typ=13 Len=8: 224,7,3,17,17,14,20,0 SQL> SELECT DUMP(TO_DATE(''17-DEC-1980 12:12:12'',''DD-MON-YYYY HH24:MI:SS'')) FROM dual; DUMP(TO_DATE(''17-DEC-198012:12:12'','' ------------------------------------ Typ=13 Len=8: 188,7,12,17,12,12,12,0

Usando ANSI Date literal , al igual que TO_DATE :

SQL> SELECT DUMP(DATE ''2016-03-17'') FROM dual; DUMP(DATE''2016-03-17'') -------------------------------- Typ=13 Len=8: 224,7,3,17,0,0,0,0 SQL> INSERT INTO t SELECT to_date(''17-DEC-1980 12:13:14'',''DD-MON-YYYY HH24:MI:SS'') FROM dual; 1 row created. SQL> COMMIT; Commit complete. SQL> SELECT DUMP(col) FROM t; DUMP(COL) -------------------------------------------------------------------------------- Typ=12 Len=7: 120,116,3,17,18,6,55 Typ=12 Len=7: 119,180,12,17,13,14,15 SQL>

Como puede ver, al almacenar una fecha en la tabla, utiliza el tipo 12 . El segundo tipo 13 se usa al convertir un literal de cadena en una fecha usando funciones de fecha o cuando la fecha es devuelta por funciones de fecha interna como SYSDATE / CURRENT_DATE .