1. ホーム
  2. sql

[解決済み] Oracleで時刻を除いた日付だけを取得する

2022-02-11 18:02:12

質問

あるデータを取得するためのSQLリクエストがあり、日付と時刻を返す 'pa.fromdate' というカラムがあります。DD.MM.YYYY」形式の日付のみを返すようにするにはどうしたらよいですか?のようなものを試したことがあります。 trunc(to_date(pa.fromdate, 'MM.DD.YYYY')) . 動作しない。どうすればいいのでしょうか?

SELECT pro.inscatid,
  t.epotypeid,
  t.paysum,
  t.note,
  pa.blankno,
  pa.blankseria,
  pa.signtime,
  pa.fromdate,
  ca.accnum,
  ou.name,
  cst.inn,
  pkg_customers.GETCUSTOMERFULLNAME(cst.id) cstfio
FROM epo_orders t
LEFT JOIN epo_orderdetails od
ON od.orderid      = t.id
AND od.iscanceldoc = -1
LEFT JOIN plc_Agree pa
ON pa.id = od.agreeid
LEFT JOIN pro_products pro
ON pro.id = pa.proid
LEFT JOIN nsk_transferdetails td
ON td.transferid = pa.transferid
AND td.orgtypeid = 4
LEFT JOIN cst_customers cst
ON cst.id = t.cstid
LEFT JOIN cst_cstaccounts ca
ON ca.id = t.cstaccid
LEFT JOIN nsk_orgunits ou
ON td.orgunitid    = ou.id
WHERE t.epotypeid IN (159,1010,169,175)
AND rownum         <20;

どのように解決するのですか?

通常は、単純にdatetimeを TRUNC :

TRUNC(pa.fromdate)

これは、datetimeから時間の部分を取り除き、単なる日付を取得します。そして、アプリケーション層では、それをどのように表示するかを気にすることになる。

例えば、グリッドのあるGUIがあるとします。グリッドはユーザーのシステム設定(例:Windowsの地域設定)に従って日付を表示しますが、グリッドはその日付を知っているので、それに従ってソートすることができます。これを実現するために、グリッドに 日付 でなく 文字列 は日付を表す。

文字列の書式を固定にしたい場合(ファイルに書き込むためなど)には TO_CHAR の代わりに

TO_CHAR(pa.fromdate, 'dd.mm.yyyy')