2016-12-21 6 views
0

Ich habe eine Nullwert-Spalte A vom Typ boolean, wobei die meisten Werte None sind und einige davon True sind. Ich möchte diese Spalte in eine timestamp Spalte ändern und für alle vorhandenen Zeilen, wenn der aktuelle Wert nicht None ist, dann auf einen bestimmten Zeitstempel setzen.Ändern Sie den Spaltentyp und setzen Sie den Wert in Abhängigkeit von den vorhandenen Daten.

Ist das möglich? Die einzige Möglichkeit, die ich mir vorstellen kann, ist, eine Zwischenspalte zu erstellen, die die neu berechneten Werte enthält, den Typ A zu ändern, Werte aus der neuen Spalte zu kopieren und sie dann zu löschen.

Gibt es einen einfacheren Weg?

+0

Btw welchen Wert Sie in der Timestamp Spalte setzen möchten, wenn der vorherige Wert wahr ist. Planen Sie, das aktuelle Datum festzulegen? Die einzige Möglichkeit besteht darin, eine neue Spalte hinzuzufügen und ihren Wert basierend auf dem Wert aus der alten Spalte festzulegen. Dann später die alte Spalte fallen lassen. Dein Ansatz sollte gut genug sein. – Baskar

+0

@Baskar ist nicht wirklich wichtig, worauf ich es setze, tbh. Ich hatte vor, es auf den Start der Unix-Zeit zu setzen. – ganduG

Antwort

1

Ist das möglich?

NO, dazu führen, dass Spaltendatentyp zur Zeit boolean ist und somit auch wenn Sie ALTER Anweisung verwenden und die Art ändern TIMESTAMP ... wie denken Sie, werden Sie die vorhandenen Zeilenwerte ändern, die TRUE sind? Da es nicht zu timestamp Datentyp konvertiert werden kann.

Nur so kann ich sehen, wird eine neue Spalte mit TIMESTAMP Datentyp zu schaffen, um die Tabelle zu aktualisieren und diese Spalte füllen und dann fallen die bestehende Säule A

0

Es ist unmöglich, die boolean Spalte Datetime Spalte zu zwingen, wenn es vorhanden ist bool Daten in der Spalte. Ich denke, der einzige Weg, den Sie tun können, ist, eine Staging-Spalte mit datetime Spalte zu erstellen, diese Spalte mit der Spalte bool zu aktualisieren und dann die Spalte bool zu löschen.

2

Ja wie alle erwähnten es ist unmöglich, den Typ der Spalte zu ändern. Sie können eine neue Datetime-Spalte hinzufügen.

Update tablename set newcolumn = value where oldcolumn = true; 
Update tablename set newcolumn = value where oldcolumn = none; 

Später können Sie die alte Spalte fallen lassen. Dies ist ein Pseudocode.

Verwandte Themen