実現したいこと
Redshift上での話です。
あるカラムに時刻がtime without time zone型で格納されています。
24時のデータは00時のように表現されていて、これを24:00~に変換したいです。
前提
修正依頼ありがとうございました。
下記のコードを見て頂きたいです。
発生している問題・エラーメッセージ
Case When Extract(hour From depart_datetime) = 0 Then date_add('hour', 24, depart_datetime) Else depart_datetime End As depart_datetime, 上記のコードを試しています。When Extract(hour From depart_datetime) = 0の抽出はコードの通りに作動することを確認済みです。 00時に24を足す処理ができません。エラーなどは発生していませんが、00から24への変更が実施されていないです。こちら何が問題なのでしょうか?
該当のソースコード
ソースコード
試したこと
24を'24'に変更してみても結果は変わりませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
「上手くいきませんでした。」「Redshift上ではto_timeは扱っていない?とか」では、実際に何が起きたのか伝わりませんので、
* 実際に行った操作
* その結果出力された内容
を、省略や要約をせず、具体的に記してください。
「具体的に 」というのは、「それを見た他のひとがあなたがやったのと全く同じことをして結果を再現できるくらいに」という意味です。
こののコメント欄に書くのではありません。質問文を編集して書いてください。
TIME WITHOUT TIME ZONE = TIME = TIMETZ のようですね。
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Datetime_types.html
24:00:00 までしか格納できないから 0 時ちょうど以外は無理では?
日時形式の文字列 https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_FORMAT_strings.html を読むと、
> HH24 時 (24 時間制、00~23)
と記述されている。「時」は0時から23時まで。24時はない。
ごく普通にかんがえて、2023-10-12 24:00:00 とは言わない。2023-10-13 00:00:00 という。
# ラヂオテレビの番組表なら27時とかあるけれど、普段は使わない。
そういうことなのでは?
「一度文字列に変換してから、00を24に変更した」カラムを設けるのがいいのでは。日から一引くのをお忘れなきよう。
24時を表示するなら、少なくとも25時間表記となるような独自の関数を作成する必要があります。
30時間制みたいなことをやりたいのでしょうか。
https://ja.wikipedia.org/wiki/30%E6%99%82%E9%96%93%E5%88%B6
00時だけを24時に変換したいんですよね、、
バスの乗車時間を求めたいのですが、例えば23:59:00から00:00:01ですと差分が求められないのです。
そのため00時を24時に変えたいと思っています。
時間以下の部分だけ比較するからでしょう。
arrival_datetime と depart_datetime の差を求めればいいのでは。
[追記] それに、おっしゃる方法では足掛け3日以上にわたって運行する場合にはやっぱり対応できませんよね。
今の型ではどうあがいても 00:00:00 ~ 24:00:00 までしか格納できないので DB 設計者に相談して TIMESTAMP 型に変えてもらったほうがいいんじゃないですか?
でなければ、計算するところで頑張るしかないです。
depart_datetimeという名前なので日付と時刻を連結したタイムスタンプなのかと思いましたが、ちがうんでしょうか。
あと現実の運用としても、土日祝日ダイヤや季節ダイヤがあるので乗降車日は特定しないといけないと思いますね。
timestampの比較の時間差を、時刻型ではなく単に時刻のフォーマットに整形したもので表示するだけだと思います。