2012-09-04 3 views
0

J'ai le déclencheur suivant qui insère des enregistrements dans le tableau B chaque fois que le tableau A est mis à jour. Cela fonctionne bien mais TableA_date est en format temps unix et je veux convertir lorsque le déclencheur insère le disque dans le tableau B.MySQL Utilisation correcte de From_Unixtime dans Trigger

DELIMITER $$ 
CREATE TRIGGER MyTrigger 
AFTER INSERT 
ON TableA 
FOR EACH ROW 
BEGIN 
    INSERT INTO TableB SET 
    TableB_id = NEW.TableA_id, 
    TableB_date = FROM_UNIXTIME(NEW.TableA_date, '%d/%m/%y %r'), 
    TableB_comment = NEW.TableA_comment; 
END $$ 
DELIMITER ; 

Dans mes résultats, au lieu de « 01/01/70 03:00 : 05 AM "comme la date convertie que je reçois" 5 "- Je sais que la chaîne de format est correcte que je suis capable de l'utiliser dans une déclaration select. Merci pour votre aide

+2

Quel est le type de données de votre colonne 'TableB.TableB_date'? – eggyal

+0

@eggyal type de données est int (10) – Arkady

+1

@Arkady C'est une erreur. Cela devrait être 'timestamp'. L'horodatage interne est stocké en tant qu'int, mais lorsque vous le définissez sur timestamp, MySQL gère automatiquement toutes les conversions de date pour vous. – Ariel

Répondre

0

Vous travaillez trop dur. Juste laisser la chaîne de format entièrement. Les dates sont stockées sous forme de dates, pas de chaînes.

En fait, n'utilisez même pas la conversion du tout! Affectez juste directement la colonne de date, et MySQL fera la conversion dont il a besoin. Je suppose que TableA_date est stocké à l'aide du type de données timestamp et que TableB_date est datetime. (Bien que vous puissiez vouloir timestamp pour celui-là aussi.)

Si vous utilisez d'autres types de données comme int, ou char, corrigez-le. Ce n'est pas la bonne façon de structurer une base de données.


Juste pour répondre à votre question réelle (au lieu de vous dire la bonne façon de le faire) le format de date que vous voulez est yyyy-mm-dd hh:mm:ss pas ce que vous avez.