Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

inserimento di un orario in un campo di tipo DATE su Oracle

2,481 views
Skip to first unread message

Massimo Schiavon

unread,
Jun 19, 2003, 8:01:53 PM6/19/03
to
Utilizzo oracle 8.1.7 ed ho una tabella in cui devo inserire un orario (tipo
'12:00' con precisione al minuto) in un campo. Credo che il tipo del campo
debba essere un DATE ma non riesco a fare le insert.
Qualcuno puo aiutarmi magari facendomi un esempio di una insert che
funzioni?


Ender Motion

unread,
Jun 20, 2003, 1:16:04 AM6/20/03
to
> Utilizzo oracle 8.1.7 ed ho una tabella in cui devo inserire un orario
(tipo
> '12:00' con precisione al minuto) in un campo. Credo che il tipo del campo
> debba essere un DATE ma non riesco a fare le insert.

DATE è corretto (anche se comunque non potrai mai avere *solo* l'ora, ci
sarà sempre una data associata che poi non utilizzerai), prova con

insert into _tabella_ (_campo_orario) values (to_date('1200', 'hh24mi')

Saluti,
Ender


dav...@yahoo.com

unread,
Jun 20, 2003, 1:17:01 AM6/20/03
to
Massimo Schiavon <sch...@tin.it> wrote:
> '12:00' con precisione al minuto) in un campo. Credo che il tipo del campo
> debba essere un DATE ma non riesco a fare le insert.

Se devi gestire le ore, forse ti conviene un campo DATETIME, ma se
non devi farci calcoli sopra forse ti conviene ancora di piu' un
banale campo di 5 caratteri... o un campo numerico da trattare poi
in fase di visualizzazione/modifica.

Davide

Stefano "HappyMan"

unread,
Jun 20, 2003, 2:03:13 AM6/20/03
to
On Fri, 20 Jun 2003 00:01:53 GMT, "Massimo Schiavon" <sch...@tin.it>
wrote:

Io quando iniziai a programmare con Oracle come server persi tempo a
capire che il formato delle date che avevo sempre usato con MS SQL 7
non era accettato per default :-)

Lavorando sempre nel formato yyyy/mm/gg ho trovato essenziale la
funzione
alter session set NLS_DATE_FORMAT='yyyy/mm/dd'
(vado a memoria, non ho i sorgenti qui con me) eseguita ad inizio
connessione.
Nel tuo caso potrebbe essere
alter session set NLS_DATE_FORMAT='yyyy/mm/dd HH24:mi:ss'

Poi una insert l'esegui con
insert into table .... values ('2003/06/20'....)

In ogni caso un giro su google con chiavi di ricerca "alter session
oracle date" ti da maggiori dettagli.


Stefano "HappyMan"
--
Database Gate - The Powerful SQL Editor ODBC-based
HD Checker - The S.M.A.R.T. Hard Disk Reader
Asus Checker - CPU and Asus MB Checker
http://www.sgr.info

Andrea Salzano

unread,
Jun 20, 2003, 5:09:33 AM6/20/03
to

Il campo DATE in oracle e' gestito con 7 byte

secolo,anno,mese,giorno,ora,minuti,secondi

Quando definisci un campo DATE, porti sempre con te queste
informazioni.
C'e' da dire che il modo di visualizzare una data e' indipendente
dal modo in cui la inserisci.

Inserire una data
-----------------

create table a (nome varchar2(30), nascita date);

insert into a values ('andrea',to_date('07/01/1971','gg/mm/yyyy');
insert into a values ('andrea',to_date('07-01-1971','gg-mm-yyyy');
insert into a values ('andrea',to_date('01/1971/07','mm/yyyy/gg');

...etc. Tutte queste forme sono equivalenti. L'importante e' dare il
formato con cui si passa la data alla funzione di conversione TO_DATE.

Visualizzare una data
---------------------
1.Puoi scegliere di utilizzare la funzione TO_CHAR

select nome,to_char(nascita,'yyyymmdd') from a;
select nome,to_char(nascita,'dd mm yyyy') from a;
select nome,to_char(nascita,'dd.mm.yyyy') from a;

Come nel caso di insert, le forme riportate sono equivalenti.

2. Puoi scegliere di utilizzare la variabile d'ambiente NLS_DATE_FORMAT

----->
[vasp2.VASP2]/sbrdbms/oracle-> export NLS_DATE_FORMAT='dd mm.yyyy'
[vasp2.VASP2]/sbrdbms/oracle-> echo $NLS_DATE_FORMAT
dd mm.yyyy
[vasp2.VASP2]/sbrdbms/oracle-> sqlplus internal

SQL*Plus: Release 8.1.7.0.0 - Production on Fri Jun 20 11:01:27 2003

(c) Copyright 2000 Oracle Corporation. All rights reserved.


Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

SQL> select sysdate from dual;

SYSDATE
----------
20 06.2003
<-----


Di default oracle formatta la data come NLS_DATE_FORMAT=dd-mon-yy

SQL> exit
SQL> Disconnected from Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
[vasp2.VASP2]/sbrdbms/oracle-> unset NLS_DATE_FORMAT
[vasp2.VASP2]/sbrdbms/oracle-> sqlplus internal

SQL*Plus: Release 8.1.7.0.0 - Production on Fri Jun 20 11:04:08 2003

(c) Copyright 2000 Oracle Corporation. All rights reserved.


Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

SQL> select sysdate from dual;

SYSDATE
---------
20-JUN-03


Quello che voglio dire, da tutto questo e' che indipendentemente come si
utilizza la data, Oracle usa sempre tutti i byte a disposizione per
valorizzare il campo DATE. E non dobbiamo neanche preoccuparci di come la
inseriamo per poi visualizzarla: le due fasi (insert e select) son
distinte.

P.S.
---
Se volessi inserire anche l'ora i minuti ed i secondi:

insert into a values ('andrea',
to_date('07/01/1971 13:31:20','dd/mm/yyyy hh24:mi:ss');

Ender Motion

unread,
Jun 20, 2003, 5:57:11 PM6/20/03
to
> P.S.
> ---
> Se volessi inserire anche l'ora i minuti ed i secondi:
>
> insert into a values ('andrea',
> to_date('07/01/1971 13:31:20','dd/mm/yyyy hh24:mi:ss');

...per fortuna. ;)


0 new messages