🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PostgreSQL

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

SQL

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

Q&A

解決済

2回答

1860閲覧

日付のみが一致するものをJOINしたい

退会済みユーザー

退会済みユーザー

総合スコア0

PostgreSQL

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

SQL

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

0グッド

0クリップ

投稿2019/12/01 14:40

編集2019/12/30 12:59

下記の様な2つのテーブルを日付でJOINしたいのですが、
単純に "ON uriage1.date = uriage2.date"を指定すると、
時間の設定の関係で全件不一致となってしまいます。
何かいい方法はないでしょうか。
(postgresqlを想定しています。)

uriage1の時間:"00:00:00"
uriage2の時間:"17:00:00"

uriage1
date  price
2010-01-01 00:00:00 100
2010-01-02 00:00:00 120
2010-01-05 00:00:00 130

uriage2
date  price
2010-01-01 17:00:00 50
2010-01-02 17:00:00 100
2010-01-03 17:00:00 200

■テーブル定義

SQL

1create table uriage1 (date timestamp,price double precision); 2create table uriage2 (date timestamp,price double precision);

■データ

SQL

1insert into uriage1(date,price) values('20100101',100); 2insert into uriage1(date,price) values('20100102',120); 3insert into uriage1(date,price) values('20100105',130); 4insert into uriage2(date,price) values('2010-01-01 17:00:00',50); 5insert into uriage2(date,price) values('2010-01-02 17:00:00',100); 6insert into uriage2(date,price) values('2010-01-03 17:0:000',200);

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

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

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

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

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

Orlofsky

2019/12/02 10:54 編集

他のデータベースに移行する案件って結構多いです。 date ってPostgreSQLでは予約語ではないですが、予約語になっているデータベースが多いのであまり列名などには使わない方が良いです。 https://www.postgresql.jp/document/11/html/sql-keywords-appendix.html 売上日だから SALES_DATE などとされては?
退会済みユーザー

退会済みユーザー

2019/12/07 09:40

申し訳ございません、追加しました。 確かにdateは予約語ですが、何故か使えました。(エラーにはならないのですね。。。)
guest

回答2

0

https://www.postgresql.jp/document/9.4/html/functions-formatting.html
joinする対象カラムをto_charを使ってymdの形式にしてから比較するなどなど

投稿2019/12/01 16:37

hentaiman

総合スコア6426

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

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

guest

0

ベストアンサー

下記の様に、to_charを使うことで実現できました。
ありがとうございます。

select to_char(uriage1.date,'YYYY-MM-DD'),
uriage1.price,uriage2.price
from uriage1
inner join uriage2 on
to_char(uriage1.date,'YYYYMMDD') = to_char(uriage2.date,'YYYYMMDD');

投稿2019/12/07 09:53

編集2019/12/07 09:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hentaiman

2019/12/07 16:28 編集

いくらなんでもこれで解決しましたは有り得ない、しかもこちらの回答を利用した解決をしておきながら評価すらないとはイカれてる こんなものを解決法に選択するなら最初から質問するべきではない
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問