[MySQL] Inserire in automatico ora e data attuale

lunedì 19 aprile 2010 - 16.49

max1850 Profilo | Junior Member

Salve.
Fin'ora ho lavorato esclusivamente in Access e ora devo migrare a MySQL...
Descrivo in breve: ho una tabella in mysql che deve inserire in automatico la data e l'ora attuale, rispettivamente nei campi Data ed Ora, ogni qual volta viene aggiunto un record alla tabella.
In Access utilizzavo le funzioni Date() e Time() e li mettevo in "Valore Predefinito", ma in Mysql non riesco a capire nè quali funzioni devo usare e nè dove devo inserirle in phpmyadmin.
Ora sto usando MySQL 5.1 e phpMyAdmin 3.2.4.

Grazie

Max!

lbenaglia Profilo | Guru

>Descrivo in breve: ho una tabella in mysql che deve inserire
>in automatico la data e l'ora attuale, rispettivamente nei campi
>Data ed Ora, ogni qual volta viene aggiunto un record alla tabella.

Ciao Max,

Definisci una colonna TIMESTAMP e definisci su di essa un constraint di default che valorizza la colonna con il valore di ritorno della funzione CURRENT_TIMESTAMP:

ALTER TABLE <nome tabella> ALTER <nome colonna> SET DEFAULT CURRENT_TIMESTAMP

Per maggiori info fai riferimento al manuale:
http://dev.mysql.com/doc/refman/5.1/en/timestamp.html

>Grazie
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

max1850 Profilo | Junior Member

Ciao.
Sempre in phpmyadmin ho definito una colonna di "Tipo:" TIMESTAMP e in "Predefinito" ho inserito la funzione CURRENT_TIMESTAMP, ma ogni qual volta aggiungo un record mi aggiunge in automatico il valore "2010-04-19 17:08:37". Come faccio ad ottenere solo la data anzicchè data ed ora?
E viceversa.. come faccio ad ottenere solo l'ora?

Ciao
Max!

lbenaglia Profilo | Guru

>Sempre in phpmyadmin ho definito una colonna di "Tipo:" TIMESTAMP
>e in "Predefinito" ho inserito la funzione CURRENT_TIMESTAMP,
>ma ogni qual volta aggiungo un record mi aggiunge in automatico
>il valore "2010-04-19 17:08:37". Come faccio ad ottenere solo
>la data anzicchè data ed ora?
>E viceversa.. come faccio ad ottenere solo l'ora?

CURRENT_TIMESTAMP restituisce sia la data che l'ora.
In fase di SELECT puoi ricorrere alle funzioni DATE() e TIME() per ottenere rispettivamente data e ora.
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

max1850 Profilo | Junior Member

Quindi non c'è una funzione che inserisce direttamente solo la data oppure solo l'ora?

Ciao
Max!

lbenaglia Profilo | Guru

>Quindi non c'è una funzione che inserisce direttamente solo la
>data oppure solo l'ora?
Certo che ci sono, ma non capisco perché vuoi definire 2 colonne distinte quando ti servono entrambe le informazioni che puoi discriminare in fase di SELECT.
Comunque le funzioni sono CURRENT_DATE e CURRENT_TIME e le trovi documentate al precedente link.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

max1850 Profilo | Junior Member

Allora.. mi spiego meglio. A me servono 2 colonne distinte, una per la data attuale e una per l'ora attuale.
Ora, parliamo solo della data per non confonderci ulteriormente..
Siccome sto facendo tutto tramite phpmyadmin (e non sql) non capisco dove inserire la funzione CURRENT_DATE. In "Predefinito" non riesco ad inserirla...
Allego un'immagine del phpmyadmin

502x414 15Kb


Ho provato ad inserirla in ogni parte ma mi esce sempre l'errore "valore invalido"...

Ciao
Max!

lbenaglia Profilo | Guru

>Siccome sto facendo tutto tramite phpmyadmin (e non sql) non
>capisco dove inserire la funzione CURRENT_DATE. In "Predefinito"
>non riesco ad inserirla...
Non saprei, io ti suggerirei di utilizzare il comando di ALTER TABLE.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

max1850 Profilo | Junior Member

Allora.. sono passato al sql così da farla a mano...
Ecco la query, che però mi da sempre errore:

CREATE TABLE dataodierna (

ID INT(11) AUTO_INCREMENT NOT NULL,
Nome VARCHAR(255) DEFAULT '',
data_di_nascita CUR_DATE()

);

Non so come mai ma mi da il seguente errore:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CUR_DATE() )' at line 5

Eppure sembra giusta...

P.S: ho provato anche con CURRENT_DATE e CURRENT_DATE() ma niente

Ciao
Max!

lbenaglia Profilo | Guru

>Allora.. sono passato al sql così da farla a mano...
>Ecco la query, che però mi da sempre errore:
>
>CREATE TABLE dataodierna (
>
> ID INT(11) AUTO_INCREMENT NOT NULL,
> Nome VARCHAR(255) DEFAULT '',
> data_di_nascita CUR_DATE()
>
>);
A parte la sintassi, ma come può la data di nascita assumere come valore di default la data odierna?!?!
Non ho MySQL ma leggendo la documentazione ufficiale che trovi sul relativo sito la sintassi dovrebbe essere:

CREATE TABLE dataodierna ( ID int AUTO_INCREMENT NOT NULL, Nome varchar(20) NOT NULL, DataDiNascita date NOT NULL DEFAULT CURRENT_DATE );

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

max1850 Profilo | Junior Member

Ciao.
Il campo "DataDiNascita" è usato, logicamente, solo in questa prova...
Ho provato ad inserire la tua query ma da sempre lo stesso errore:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE )' at line 4

Non riesco proprio a capire cos'è che non va! Sto provando da stamattina... :(
La causa potrebbe essere che la tabella da creare deve per forza essere InnoDB? Oppure può essere anche MyISAM?

Ciao

lbenaglia Profilo | Guru

>Ho provato ad inserire la tua query ma da sempre lo stesso errore:
>
>#1064 - You have an error in your SQL syntax; check the manual
>that corresponds to your MySQL server version for the right syntax
>to use near 'CURRENT_DATE )' at line 4

La documentazione riporta:

The DEFAULT clause specifies a default value for a column. With one exception, the default value must be a constant; it cannot be a function or an expression. This means, for example, that you cannot set the default for a date column to be the value of a function such as NOW() or CURRENT_DATE. The exception is that you can specify CURRENT_TIMESTAMP as the default for a TIMESTAMP column. See Section 10.3.1.1,

Quindi definisci la colonna TIMESTAMP ed il DEFAULT CURRENT_TIMESTAMP

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

max1850 Profilo | Junior Member

Ahhhh ecco perchè!!!
OK, allora procedo con il TIMESTAMP e CURRENT_TIMESTAMP...
Grazie dell'infinita pazienza che hai avuto

Ciao
Max!
Max!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5