質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

3回答

20760閲覧

Postgre 文字列→日付フォーマット変換(to_date)

c_a

総合スコア42

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/04/17 10:59

編集2018/04/17 13:07

PostgreSQL 9.2.23を利用しています。

テーブルに"20180417T051318400"というデータが文字列として保存されています。

これを日付フォーマット変換したいです。
select文でto_dateを用いてやるには"YYYYMMDD・・・"(ミリ秒まで表示)をどのように指定すればいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

書式はこちら(表 9-21. 日付/時刻型の書式テンプレートパターン)を参照して下さい。

SQL

1select to_timestamp('20180417T051318400', 'yyyymmdd hh24missms')

※日付/時刻型の書式にないものは単なる文字として扱われます。

投稿2018/04/17 12:50

編集2018/04/17 13:22
sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/18 06:25

勉強になりました
guest

0

下記、机上のみで実行させてないのですみません。
fieldってところを、変換元データにしてください。

substring関数を駆使して文字列を編集して加工するしか無いような気がします。

cast(substring(field,1,4) || '-' || substring(field,5,2) || '-' || substring(field,7,2) || ' ' || substring(field,10,2) || ':' || substring(field,12,2) || ':' || substring(field,14,2) as timestamp)

別なやり方を思いついた。
make_date(cast(substring(field,1,4) as integer), cast(substring(field,5,2) as integer), cast(substring(field,7,2) as integer))
で日付生成、
make_time(cast(substring(field,10,2) as integer), cast(substring(field,12,2) as integer), cast(substring(field,14,2) as integer))
で時刻生成なので、足し算するとか。
make_timestamp(cast(substring(field,1,4) as integer), cast(substring(field,5,2) as integer), cast(substring(field,7,2) as integer), cast(substring(field,10,2) as integer), cast(substring(field,12,2) as integer), cast(substring(field,14,2) as integer))
で直接タイムスタンプ生成でもいいかも。

全然to_date()使ってないです。

投稿2018/04/17 11:18

編集2018/04/17 11:39
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQL文字列関数と演算子
の substring で1桁目から8桁を取り出して to_dateします。

select to_date(substring('20180417T051318400' from 1 for 8), 'yyyymmdd') as date1 from ...

投稿2018/04/17 11:16

編集2018/04/17 11:22
Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

c_a

2018/04/17 11:25

大変失礼いたしました。ミリ秒までを表示したいです!
Orlofsky

2018/04/17 11:45

そうでしたら、質問を訂正してください。 上記年月日 || 時分秒ミリ秒の文字列を結合して、 [データ型書式設定関数](https://www.postgresql.jp/document/9.2/html/functions-formatting.html) to_date ではなく、to_timestampで変換します。日付/時刻型の書式テンプレートパターンは見れば理解できるでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問