今回もあるシステムから別のシステムにデータ移行したときの話。
「予約滞在時間」のデータ型を変換する必要がありました。
※初心者が手間をかけて変換しました。他の方法があればご指摘いただきたいです。
移行元の「予約滞在時間」→120、90、180と数値型
移行先の「予約滞在時間」→2:00:00 1:30:00 3:00:00 time型
今回の方法 PowerQueryを使います。
①時間:移行元の滞在時間を60で割った商のカスタム列を作成
例 120÷60=2 90÷60=1あまり30 180÷60=3
②分:移行元の滞在時間を60でわったあまりのカスタム列を作成
例 120÷60=2 あまり0なので分は0
90÷60=1あまり30 あまり30なので30分
③ここで求めた数値を#time(時、分、秒)にあてはめてカスタム列を作成する
では詳しくメモします。
①時間列の作成
#time(時、分、秒)の「時」の列を作成します。
「時」は60でわったときの商なので
Number.IntegerDivide関数を使いました。
除算した結果の整数部分を返す関数です。詳しい説明は↓参照
Number.IntegerDivide - PowerQuery M | Microsoft Docs
具体的には
PowerQuery→列の追加→カスタム列
カスタム列の式には
Nuber.IntergerDivide([予約滞在時間],60)と入力し「OK]を押しました。
そうすると
[予約滞在時間]を60で割った商の列が新たに作成されます。
②分列の作成
#time(時、分、秒)の「分」の列を作成します。
「分」は60でわったときのあまりなので
Number.Mod関数を使いました。
あまりを取得できる関数です。詳しい説明は↓参照
Number.Mod - PowerQuery M | Microsoft Docs
具体的には
PowerQuery→列の追加→カスタム列
カスタム列の式には
Nuber.Mod([予約滞在時間],60)と入力し「OK]を押しました。
そうすると
[予約滞在時間]を60で割ったあまりの列が新たに作成されます。
③時と分の列からtime型の列を作成する
time型のデータは#time(時、分、秒)で作成できるので
先ほど作成した時間の列と分の列が使えます。
具体的にはPowerQuery→列の追加→カスタム列
カスタム列の式には
#time(時間の列、分の列、0)
を入力します。↑列名は各自変更してください。秒は0にしました。
数値型の分からtime型の列を作成することができたとおもったのですがよく見るとデータ型がtime型でないようです。なのでtime型に変更します。
列の見出しの上で右クリックして「時間」を押せば time型に変更できます。
数値型の分からtime型の列を作成することができました。
とりあえず今回はこの方法でデータ変更をしたのですが
このやり方だと
time型の列を新たに作成する ←今回はここまでをブログでメモ
最初からある列を消す。
time型の新たに作成した列をリネームする
という作業が必要で面倒くさいです。
最初からある列(300分、120分の列)をそのまま変更(3:00:00,2:00:00)できる方法を知りたいです。