2010-09-08 5 views
2

Ces dernières heures, j'ai essayé de formater un timestamp MySQL en utilisant DATE_FORMAT et ça ne fait rien!Pourquoi MySQL DATE_FORMAT imprime-t-il un résultat vide?

Perl code:

use CGI; 
use DBI; 

my $q = new CGI; 

# Database connection goes here 

my $sth_select = $dbh->prepare(
    "SELECT DATE_FORMAT(timestamp, '%m/%d/%y') FROM foo" 
); 

$sth_select->execute() || die "Unable to execute query: $dbh->errstr"; 

if (my $ref = $sth_select->fetchrow_hashref()) { 
    print $q->header; 
    print " TIME: $ref->{timestamp}"; 
    exit; 
} 

Résultats

TIME: 

Il n'imprime pas du tout le temps formaté, il est vide! Lorsque je tente d'imprimer l'horodatage, il n'imprime rien, mais si je devais supprimer DATA_FORMAT et simplement faire un SELECT timestamp FROM foo, alors il imprime l'horodatage juste bien, bien que non formaté cependant. Quelqu'un peut-il donner son avis sur cette question, s'il vous plaît?

Répondre

7

Le hachage renvoyé a pour en-têtes les en-têtes de colonne fournis par la base de données. Lorsque vous utilisez une telle fonction, l'en-tête de colonne est en réalité "DATE_FORMAT (timestamp, '% m /% d /% y')". Essayez de modifier votre SQL à:

my $sth_select = $dbh->prepare("SELECT DATE_FORMAT(timestamp, '%m/%d/%y') AS timestamp FROM foo"); 
+1

Ou vous pouvez utiliser fetchrow_arrayref' '' fetchrow_array' ou qui ne se soucient pas des noms de colonnes. – cjm

+0

Ou: 'pourchaque ma clé $ (clés% $ ref) {print" $ key = $ ref -> {$ key} \ n "; } ' –

+0

Vous monsieur vient de résoudre mon problème! J'essayais l'argument 'AS' mais au lieu d'utiliser 'AS timestamp' j'utilisais 'AS formated_timestamp'. Néanmoins j'ai essayé votre suggestion et travaillé comme un charme! Si jamais je te rencontre un jour la bière est sur moi! Merci beaucoup! – JCB

Questions connexes