2016-12-21 4 views
0

booleanのNULL可能な列Aがあります。ほとんどの値はNoneであり、そのうちのいくつかはTrueです。この列をtimestamp列に変更し、現在の値がNoneでない場合はすべての既存行に対して、デフォルトのタイムスタンプに設定します。既存のデータに応じて列の種類と設定値を変更します

これは可能ですか?私が考えることができる唯一の方法は、新たに計算された値を保持する仲介列を作成し、Aの型を変更し、新しい列から値をコピーしてからドロップすることです。

もっと簡単な方法はありますか?

+0

前回の値がtrueの場合、タイムスタンプの列に設定する値はBtwです。現在の日付を設定する予定ですか?唯一の方法は、新しい列を追加し、古い列の値に基づいてその値を設定することです。その後、古い列を後でドロップします。あなたのアプローチは十分に良いはずです。 – Baskar

+0

@Baskarは私が設定したものとは関係ありません。 UNIX時間の開始を設定する予定だった。 – ganduG

答えて

1

これは可能ですか?

NO

、...あなたの列のデータ型が、現在 booleanであり、したがって、あなたも ALTERステートメントを使用して TIMESTAMPにタイプを変更した場合起こすあなたが TRUEをしている既存の行の値を変更すると思いますか?それは timestampデータ型に変換できないためです。私が見

唯一の方法は、既存の列をドロップし、テーブルを更新し、その列を記入し、TIMESTAMPデータ型を持つ新しい列を作成しているA

0

そこに存在する場合booleanDatetimeに列を強制することは不可能です列内のデータをブールします。あなたが行うことができる唯一の方法は、列のステージング列を作成し、その列をbool列で更新してからbool列を削除することです。

2

はいすべての記載通り、列のタイプを変更することは不可能です。 新しいdatetime列を追加できます。

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

後で古い列を削除できます。これは疑似コードです。

関連する問題