2016-03-28 8 views
0

Ich schrieb diese Abfrage zum Einfügen von Daten zu Att_process Tabelle checkin_time Feld.Datepart Funktion mit If Bedingung

Wenn die CHECKINOUT Tabelle CHECKTIME Feld Hours Wert < 12, sollte es einsetzen, um CHECKINOUT Tabelle CHECKIN_TIME Field. Und wenn sie größer als 12 sollte es einsetzen, um CHECKINOUT Tabelle CHECKOUT_TIME Feld

Aber es funktioniert nicht, können Sie mir helfen, das herauszufinden, und ich weiß auch nicht, wie zu setzen Dies auf einen Trigger, wenn Sie mir helfen können, werde ich es wirklich zu schätzen wissen.

IF (DATEPART(HOUR,CHECKTIME) < 12) 
BEGIN 
    INSERT INTO Att_process(USERID,checkin_time) 
    SELECT CHECKINOUT.USERID,CHECKINOUT.CHECKTIME 
    from CHECKINOUT 
    where DATEPART(HOUR,CHECKTIME) < 12; 
END 
ELSE 
BEGIN 
    INSERT INTO Att_process(USERID,checkout_time) 
    SELECT CHECKINOUT.USERID,CHECKINOUT.CHECKTIME 
    from CHECKINOUT 
    where DATEPART(HOUR,CHECKTIME) >= 12; 
END 
+0

entsprechend ändern, wenn der andere Wert in der Tabelle null ist, kann man einfach das tun, ohne ein IF-Anweisung: z INSERT Att_process (USERID, checkin_time, checkout_time) SELECT USERID, FALL WENN DATEPART (STUNDE, CHECKTIME) <12 THEN CHECKTIME END, FALL WENN DATEPART (STUNDE, CHECKTIME)> = 12 THEN CHECKTIME END FROM CHECKINOUT), aber dies würde separate Datensätze erzeugen für eine Benutzer-ID ein- und auschecken. Wenn es nur zwei Einträge pro Benutzer-ID gibt (Ein- und Auschecken), können Sie MAX (CASE ... – ZLK

+0

) tun. Vermutlich ist der Grund, warum es nicht funktioniert, weil Sie in Ihrer IF-Anweisung CHECKTIME nirgendwo auswählen ... Es sei denn, es ist nur ein Beispiel und es funktioniert nicht aus einem anderen Grund. – ZLK

+0

Woher bekommen Sie diesen Parameter Wert? => CHECKTIME –

Antwort

1

Plz versuchen diese

INSERT INTO Att_process(USERID,checkin_time,checkout_time) 
SELECT USERID, 
    (CASE WHEN DATEPART(HOUR,CHECKTIME) < 12 THEN CHECKTIME END), 
    (CASE WHEN DATEPART(HOUR,CHECKTIME) >= 12 THEN CHECKTIME END) 
FROM CHECKINOUT 
0

U kann diesen Trigger verwenden Sie einfach das Skript

CREATE TRIGGER trgAfterInsert ON [dbo].[CHECKINOUT] 
FOR INSERT 
AS 
    DECLARE @uid INT; 
    DECLARE @checkin DATETIME; 
    SELECT @uid = i.USERID 
    FROM [CHECKINOUT] i; 
    SELECT @checkin = i.CHECKTIME 
    FROM [CHECKINOUT] i; 
    IF(DATEPART(HOUR, @checkin) < 12) 
     BEGIN 
      INSERT INTO Att_process 
            (USERID, checkin_time 
            ) 
      VALUES 
        (@uid, @checkin 
        ); 
     END; 
    ELSE 
     BEGIN 
      INSERT INTO Att_process 
            (USERID, checkout_time 
            ) 
      VALUES 
        (@uid, @checkin 
        ); 
     END; 
+0

Hallo Sanu Antony, es funktioniert, Danke, wie kann ich das Gleiche in meinem SQL, weil ich gleiche Datenbank in MySQL auch –

+0

Hallo Sanu Antony, diesen Trigger nicht Daten in Att_process einfügen Tabelle –

+0

https://www.siteground.com/kb/what_are_mysql_triggers_and_how_to_use_them/ –