DBeaver でいい感じに date 型に bind parameter する方法(日付型のみ)

エキサイトホールディングス Advent Calendar 2021 の14日目は、エキサイト株式会社の大澤 が担当させていただきます。

やりたいこと

SELECT :date  FROM dual;

このとき :date に対して 2021-12-07 15:01:00 の日付型をbindして実行したい

解決方法

SELECT :date  FROM dual;

:datetimestamp '2021-12-07 15:01:00' を bind して実行する

f:id:hibikiosawa4388:20211207152726p:plain
date に timestamp xxxx を bind

詳細

弊社では 一部で Oracle の DB を利用しています。 また、 Named parameters な ORM を採用しているため、 生 SQL を取得する場合は上記のようなクエリが取れます。

このときに DatetimeImmutable 型を バインドしている日付型については、 DBeaver (GUI な DB viewer) で うまくバインドできないと思っていました。

なので下記のように to_date でクエリをいちいち書き換えていましたが面倒でした。

SELECT to_date(:date, 'yyyy-mm-dd hh24:mi:ss')  FROM dual;

操作していてたまたま timestamp '2021-12-07 15:01:00' と書くことで用が済むことを発見したためここに記します。

応用使用例 (フラッシュバックを複数同時検索)

with timestamp_all as (
  select :timestamp1 as "タイムスタンプ", x_pk, x_changed_column  from XXXXXX as of timestamp (:timestamp1)
  UNION ALL
  select :timestamp2 as "タイムスタンプ", x_pk, x_changed_column  from XXXXXX as of timestamp (:timestamp2)
  UNION ALL
  select :timestamp3 as "タイムスタンプ", x_pk, x_changed_column  from XXXXXX as of timestamp (:timestamp3)
)
select * from timestamp_all;