Sto inserendo questi dati DateTime
'12/21/2012 1:13:58 PM'
nel mio database MySQL usando questa stringa SQL:
String Query = "INSERT INTO `restaurantdb`.`stocksdb` (`stock_ID`,`stock_dateUpdated`) VALUES ('@stockID' '@dateUpdated');
e ricevo questo messaggio di errore:
Incorrect datetime value: '12/21/2012 1:13:58 PM' for column 'stock_dateUpdated' at row 1
Quindi qual è il giusto formato / valore per dateTime
da inserire in un database MySQL?
D: Qual è il giusto formato / valore per il letterale DATETIME
all’interno di un’istruzione MySQL?
A: In MySQL, il formato standard per un letterale DATETIME
è:
'YYYY-MM-DD HH:MI:SS'
con il componente orario come orologio a 24 ore (ovvero, le cifre delle ore fornite come valore compreso tra 00 e 23).
MySQL fornisce una funzione incorporata STR_TO_DATE
che può convertire stringhe in vari formati in tipi di dati DATE
o DATETIME
.
Quindi, in alternativa, puoi anche specificare il valore di un DATETIME
con una chiamata a tale funzione, in questo modo:
STR_TO_DATE('12/21/2012 1:13:58 PM','%m/%d/%Y %h:%i:%s %p')
Quindi, potresti fare in modo che MySQL esegua la conversione per te INSERT
, se la tua lista VALUES
fosse così:
... VALUES ('@stockID', STR_TO_DATE('@dateUpdated','%m/%d/%Y %h:%i:%s %p');
(Ho notato che manca una virgola obbligatoria tra i due valori letterali nell’elenco dei VALUES
).
MySQL consente una certa latitudine nei delimitatori tra le parti del letterale DATETIME
, quindi non sono strettamente necessari.
MySQL 5.5 Manuale di riferimento.
Quello che ho usato funziona è anno-mese-giorno, con 24 ore di tempo. In PHP è la date('Ymd H:i:s')
, che credo corrisponda a yyyy-MM-dd HH:mm:ss
in C # /. NET. (La parte temporale è facoltativa, così come i trattini.)
Confermato in documenti, data e ora letterali :
I valori di data e ora possono essere rappresentati in diversi formati, ad esempio stringhe tra virgolette o come numeri, a seconda del tipo esatto del valore e di altri fattori. Ad esempio, in contesti in cui MySQL si aspetta una data, interpreta una qualsiasi di “2015-07-21”, “20150721” e 20150721 come data.
Come menzionato nel commento, manca il delimitatore ,
nei valori. Meglio usare STR_TO_DATE
per convertire la stringa in object data prima di inserire come:
String Query = "INSERT INTO `restaurantdb`.`stocksdb` "+ " (`stock_ID`,`stock_dateUpdated`) VALUES "+ "('@stockID', STR_TO_DATE(@dateUpdated, '%m/%d/%Y %h:%i:%s %p'))";
Il formato DATETIME di MySql è AAAA-MM-GG HH: MM: SS – Vedi questa pagina