2016-04-05 9 views
0

I Problem bei der Ausführung der folgenden Abfrage ist vorTable ‚tbl_name‘ angegeben wird zweimal, beide als Ziel für ‚UPDATE‘ und als separate Quelle für Daten

UPDATE tbluser_payment 
SET payment_date = SUBSTRING(payment_date, 1, 2) + 1 
WHERE 
    trans_updatetime IN (
     SELECT 
      trans_updatetime 
     FROM 
      `tbluser_payment` 
     WHERE 
      DAY (
       cast(trans_updatetime AS date) 
      ) IN ('28', '29', '30', '31') 
    ) 

ich durch viele Fragen gesucht, aber nichts mit dieser Abfrage in Verbindung zu setzen sie wurden Datensatz in die Datenbank einfügen.

Ich möchte payment_date coloumn mit 1, wenn where-Klausel return true

Ist dies möglich ist, durch diese Art und Weise aktualisieren?

Jede Hilfe wird geschätzt

Vielen Dank!

+0

Zeigen Sie uns die Tabellendefinition und einige Beispieldaten. –

+0

'SUBSTRING' gibt einen String (Text) zurück, was erwartest du, wenn du' + 1' mit einem Text machst? Aus Ihren Kommentaren entnehme ich, dass dies ein string-formatierter Datumswert ist. Dies ist etwas, was man nicht tun sollte ... Versuchen Sie Ihr 'payment_date' in ein korrektes Datumsformat zu bringen und rechnen Sie mit dem richtigen Typ. Wenn Sie das nicht ändern können (und Sie sollten es wirklich!), Können Sie es wieder in eine Zeichenfolge in Ihrem benötigten Format konvertieren .... – Shnugo

Antwort

3

Ich glaube nicht, dass eine Unterabfrage hier benötigt wird. Verwenden Sie die Bedingung in der Where-Klausel.

UPDATE tbluser_payment 
SET payment_date = SUBSTRING(payment_date, 1, 2) + 1 
WHERE DAY(cast(trans_updatetime AS date)) IN ('28', '29', '30', '31') 

Edit: Verwenden if die payment_date Spalte in mmyyyy Format einzustellen.

UPDATE tbluser_payment 
SET payment_date = IF(length(SUBSTRING(payment_date, 1, 2) + 1) < 2, 
         '0' + SUBSTRING(payment_date, 1, 2) + 1, 
         SUBSTRING(payment_date, 1, 2) + 1 
        ) 
        + SUBSTRING(payment_date, 3) 
WHERE DAY(cast(trans_updatetime AS date)) IN ('28', '29', '30', '31') 
and SUBSTRING(payment_date, 1, 2) <> 12 
+0

Ich habe in Zahlungstermin wie '022016' reuslt und ich möchte 032016 die aktuelle machen Abfrage geben 3 –

+0

zeigen Beispieldaten aus Payment_date Spalte. –

+0

Daten kommen in dieser Form '022016' Ich möchte dies mit 02 beginnend 02 ändern, wenn where-Klausel wahr –

Verwandte Themen