ここから本文です

標準SQLで文字列から日付や時刻への型変換について。 よろしくお願いいたします...

アバター

ID非公開さん

2019/9/1118:59:55

標準SQLで文字列から日付や時刻への型変換について。

よろしくお願いいたします。

postgresqlの10.x(詳細なバージョンは不明)

テーブル毎に日時の持ち方が異なり、以下の3種類のカラムがあります。
・varchar型カラム(日付を示す文字列が入る)
・varchar型カラム(日時を示す文字列が入る)
・varchar型カラム(時刻を示す文字列が入る)
ここから例えば2019/09/01 09:00~2019/09/01 12:00のように
日時を指定して集計する必要があります。

文字列のまま日時を指定するのは無理では?と思い、一旦timestampやdate,timeといった型に変換しなければならないと考えています。
to_timestamp('05 Dec 2000', 'DD Mon YYYY')のように文字列のフォーマットを指定して型変換する標準SQLはあるでしょうか?
あればどう書けば良いか教えてほしいです。
「やっぱりPostgreSqlはやめてxxxにする」と突然言い出される可能性があるため、できるだけPostgreSql以外でも通用するSQL文にしたいです。

なぜか情報を出し渋られているため現時点ではフォーマットが不明で
「2019/09/01」「2019-9-1」「20190901」「2019/09/01(日)」「Sunday September 1 2019」「1 September 2019」
などいくつか考えられる表記パターンのどれでデータが格納されているか分かりません。

閲覧数:
28
回答数:
3
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nora1962jpさん

2019/9/1121:08:28

> to_timestamp('05 Dec 2000', 'DD Mon YYYY')のように文字列のフォーマットを指定して型変換する標準SQLはあるでしょうか?

ありません。

その上、標準SQLだとDATE,TIME,TIMESTAMPはありますが各RDBMSの実装は異なっているのが現実です。
OracleだとDATE型が年月日時分秒を表しますが、PostgreSQLのDATE型は年月日しか格納しません。
日時比較、計算が絡むとさらにややこしくなります。

> 「やっぱりPostgreSqlはやめてxxxにする」と突然言い出される可能性があるため、できるだけPostgreSql以外でも通用するSQL文にしたいです。

リスクヘッジをどうするかですね。
契約内容、設計について蒸し返しや掌返しをしにくくする心構えは必要でしょう。

  • nora1962jpさん

    2019/9/1121:49:27

    > 型変換は標準ではないと思いますが、データが文字列型に入っているなら別に変換する必要はないかと思います。

    うーん。

    where Dfield + ' ' + Tfield between '2019/09/01 09:00' and '2019/09/01 12:00'

    こういうのやってしまうとインデックスが使われなくなります。
    レコード全件サーチになるので数千~数万くらいだとしのげてもどこかで壁に当たります。
    日付時刻の文字列として書式統一するのはまだありかもしれませんが。
    日付時刻型のほうがバイナリサイズ小さくて検索効率にすぐれます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

nan********さん

2019/9/1121:31:52

型変換は標準ではないと思いますが、データが文字列型に入っているなら別に変換する必要はないかと思います。

もちろん入力されているフォーマットに合わせて文字列を組み立てる必要はありますが、それさえ一致していれば難しいことはありません。

2019/09/01 09:00~2019/09/01 12:00

これを検索するなら、日付項目がDfield、時刻項目がTfieldだとしたら、

where Dfield + ' ' + Tfield between '2019/09/01 09:00' and '2019/09/01 12:00'

で検索できます。
ただし、前0が付いたり付いていなかったりとかだと無理ですが。

まぁ今のうちに項目を日付や時刻型にコンバートしておくのが将来的に見て、無駄な工数を削減することにつながると思いますが。
コンバートはDB特有の関数を使用する必要はあるかも知れませんが、SQLを一発書けば済む話ですし、一度それをしてしまえばあとはどんなDBにも移行も可能です。

プロフィール画像

カテゴリマスター

原沢信道さん

2019/9/1120:04:10

日付け関連の標準SQLは殆ど無いので、RDBMS毎に個別に対応する必要が有ります。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる