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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Treasure Data

Treasure Dataは、米国トレジャーデータ社の提供するクラウド型のデータマネジメントサービスです。ビッグデータ処理システムを備え、AWS上にセットアップされているため、データの集収、保管、分析を容易に行うことができます。

TreasureData

TreasureDataは、クラウド型データマネージメントサービスです。アプケーションログやセンサーデータといった時系列データの収集や保管、分析を容易に行うことが可能です。分析エンジンとしてPrestoの利用もでき、SQLで収集データをインタラクティブに分析できます。

Q&A

3回答

8468閲覧

Tresure Dataのpresto SQL (☓PostgreSQL) で数値型(bigint)から日付型(date)へ変換できません。

kemupeach

総合スコア13

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Treasure Data

Treasure Dataは、米国トレジャーデータ社の提供するクラウド型のデータマネジメントサービスです。ビッグデータ処理システムを備え、AWS上にセットアップされているため、データの集収、保管、分析を容易に行うことができます。

TreasureData

TreasureDataは、クラウド型データマネージメントサービスです。アプケーションログやセンサーデータといった時系列データの収集や保管、分析を容易に行うことが可能です。分析エンジンとしてPrestoの利用もでき、SQLで収集データをインタラクティブに分析できます。

0グッド

0クリップ

投稿2018/10/19 08:21

編集2018/10/22 01:23

前提・実現したいこと

prestoSQLで、数値(bigint)の値をdate型にしたいです。
どなたか教えていただけませんか?

発生している問題・エラーメッセージ

Cannot cast bigint to date

該当のソースコード

SQL

1cast(user_data.birth as date) as birth

user_data.birth の値は「19951231」などです。

試したこと

TO_TIMESTAMP(user_data.birth, 'YYYY-MM-dd')
もエラーでした。

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

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

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

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

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

guest

回答3

0

PostgreSQL データ型書式設定関数
to_date(to_char(...)) で変換できるでしょうか?

Presto という製品もあるからなるべく固有名詞は正確に願います。

追記

Prestoでの日付の扱い方

FROM_UNIXTIME(TD_TIME_PARSE(TD_TIME_FORMAT(time, 'yyyy-MM-dd', 'JST')))

が参考になるでしょうか?

また、この画面の右下から[Presto]タグの追加を依頼しては?

投稿2018/10/19 09:00

編集2018/10/19 16:03
Orlofsky

総合スコア16415

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

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

kemupeach

2018/10/19 09:06

ご回答いただきありがとうございます。 すみません。  Presto です!
workaholist

2018/10/19 09:22

PostgreSQLではないの?
Orlofsky

2018/10/19 15:58

間違えやすいですから、質問の prestoSQL → Presto SQL に変更し、[Treasure Data]タグを追加されては?
kemupeach

2018/10/22 04:59

ありがとうございます! date型にできました!! bigint型を、varchar型→unixtime→timestamp型にすればできるのですね! 大変助かりました!
kemupeach

2018/10/22 05:02 編集

すみません。タイトルやタグ名を変更させていただきました。 (prestoタグも問い合わせも申請しました!)
guest

0

試せてませんが。

SQL

1FROM_UNIXTIME(TD_TIME_PARSE(cast(user_data.birth as varchar),'yyyymmdd'))

以下参考
Prestoでの日付の扱い方

投稿2018/10/19 14:31

sazi

総合スコア25206

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

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

kemupeach

2018/10/22 04:56

ありがとうございます! 最後に一つ引数を追加し、以下でいけました! FROM_UNIXTIME(TD_TIME_PARSE(TD_TIME_FORMAT(time, 'yyyy-MM-dd', 'JST')))
sazi

2018/10/22 04:59

?user_data.birthが対象ではありませんでしたか?
kemupeach

2018/10/22 05:06 編集

すみません、そうです!(一般化して記載してしまいました。) 正確には以下で動きました。 FROM_UNIXTIME(TD_TIME_PARSE(TD_TIME_FORMAT(c.birth, 'yyyy-MM-dd', 'JST'))) as birth
sazi

2018/10/22 05:10 編集

birthが数値型ということでしたので、TD_TIME_FORMATは日付型を文字に変換するものなのであり、エラーになると思うのですけど・・・ エラーにならないなら、正しい変換はされていないと思います。
kemupeach

2018/10/22 05:12

二転三転すみません! 手元で実際動かしているSQLのテーブル名と、質問用にわかりやすくしたテーブル名が 違っていました。 こちらです! FROM_UNIXTIME(TD_TIME_PARSE(TD_TIME_FORMAT(user_data.birth, 'yyyy-MM-dd', 'JST'))) as birth
sazi

2018/10/22 05:15

タイムゾーンの指定が必要なら FROM_UNIXTIME(TD_TIME_PARSE(cast(user_data.birth as varchar),'yyyymmdd', 'JST')) だと思いますけど。
kemupeach

2018/10/22 05:16

ありがとうございます。 むむ。たしかにほぼ1970年にはなってます笑 ・・調べてみます。
kemupeach

2018/10/22 05:26 編集

すみません。確認してます・・
kemupeach

2018/10/22 07:04

TD_TIME_PARSE(cast(user_data.birth as varchar),'yyyymmdd', 'JST') でエラーでした。 エラー文 Unexpected parameters (varchar, varchar(10), varchar(3)) for function td_time_parse. Expected: td_time_parse(varchar, varchar) , td_time_parse(varchar) 年を取得したかったので、date型にして取り出すことをやめて、 とりあえず FLOOR(users.birth/10000)で取り出し、一応解決しました。m(__)m
sazi

2018/10/22 09:04 編集

失礼しました。TD_TIME_PARSE()には書式は渡せませんね。 他のDBMSでのTO_CHAR()に該当するものがあれば解決しそうですが、見つけることができず。。 年月日での対応とする場合には演算によって分割して、自力で日付書式文字列を生成すれば対応できますけど、どうにもスマートじゃありませんね。。
kemupeach

2018/10/23 01:11

そうですね・・むむむ。 スマートじゃないですね。 ちなみに以下も試しましたが、動きませんでした。 TO_DATE(cast(users.birth as varchar),'yyyy-MM-dd') https://prestodb.io/docs/current/functions/teradata.html エラー Failed to tokenize string [M] at offset [5] しかしお忙しい中、一緒に調べてくださってありがとうございました!m(__)m
guest

0

フォーマットの部分は弄る必要があると思いますが、以下の回答ではいかがでしょうか。
Stack Overflow - How to format bigint field into a date in Postgresql?

投稿2018/10/19 08:28

madoka9393

総合スコア992

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

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

kemupeach

2018/10/19 10:39 編集

ご回答いただきありがとうございます><! 以下で実行したところ、エラーでした・・・m(_ _)m TO_CHAR(TO_TIMESTAMP(user_data.birth,'DD/MM/YYYY')) as birth Unexpected parameters (bigint, varchar(10)) for function to_timestamp. Expected: to_timestamp(varchar, varchar) 他にも一応以下は試しました。 TO_CHAR(TO_TIMESTAMP(user_data.birth/ 1000,'DD/MM/YYYY')) as birth
mather

2018/10/19 10:13

StackOverflowの回答と自分の記述をじっくり比べてみましょう。 括弧の位置は正しいですか?
kemupeach

2018/10/19 10:39

すみません。 書き直しましたがエラーでした・・ TO_CHAR(TO_TIMESTAMP(user_data.birth/1000),'DD/MM/YYYY') TO_CHAR(TO_TIMESTAMP(user_data.birth),'DD/MM/YYYY') Unexpected parameters (bigint) for function to_timestamp. Expected: to_timestamp(varchar, varchar)
madoka9393

2018/10/19 11:16

postgreSQLではなかったのですね…。 お力になれず申し訳なし。 エラーメッセージの内容的に「bigint」を「varchar」に変換できればワンチャンあるかもですかね。
akirafudo6

2018/10/21 07:01

年月日をそれぞれ取り出し、それぞれを一度文字列に変換し、変換したものを、date型に変換してみてはどうでしょうか?上記例で、user_data.birth/1000=19951 となっているし、これを日付に変換(DD/MM/YYYY)しようというのも、無理があるように思います。一行で何でもかんでもまとめようとすると、デバックしずらく、どこに問題があるか解らなく可能性があります。
kemupeach

2018/10/22 05:08

>madoka9393 さん、mather さん 紛らわしいミスをしてしまい、大変申し訳ありません。presto のSQLでした・・ 結果、おしゃっているようにデータ型を何度か変換すればtimestamp型になることができました! >akirafudo6 さん ご回答いただきありがとうございます! 年月を取り出すやり方もありそうですね!φ(..)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問