在Oracle中只有没有时间的日期

JDo*_*oke 6 sql oracle

我有这个sql请求来检索一些数据,我有这个columd'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;
Run Code Online (Sandbox Code Playgroud)

Tho*_*ner 14

通常只需截断日期时间TRUNC:

TRUNC(pa.fromdate)
Run Code Online (Sandbox Code Playgroud)

这将从日期时间中删除时间部分,因此您只获得日期.然后在您的应用程序层中,您将关心如何显示它.

例如,您有一个带网格的GUI.网格根据用户的系统设置显示日期(例如Windows区域设置),但网格知道它的日期并可以相应地进行排序.为此,您需要使用日期填充网格,而不是使用表示日期的字符串.

如果你想要一个固定的字符串格式(例如,为了写入文件),你可以使用TO_CHAR:

TO_CHAR(pa.fromdate, 'dd.mm.yyyy')
Run Code Online (Sandbox Code Playgroud)

  • 就其价值而言,[`TRUNC()`函数](https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/TRUNC-date.html#GUID-BC82227A-2698 -4EC8-8C1A-ABECC64B0E79) 并没有真正删除时间,而是将其设置为午夜([demo](https://dbfiddle.uk/?rdbms=oracle_18&amp;fiddle=8dfa3c3d27f3eb3087fbce115746f12e))。 (4认同)
  • @Álvaro González:是的,这是一个很好的观点。Oracle 中没有日期数据类型,只有日期时间,他们不恰当地将其称为“DATE”。所以,是的,“TRUNC”只是将时间设置为午夜,这既被视为午夜的日期时间,又被视为 Oracle 中的日期。 (2认同)

小智 5

尝试使用to_char(pa.fromdate, 'MM.DD.YYYY'),这会给你想要的结果