将datetime字段转换为SQL(Oracle)中的日期字段

时间:2014-09-26 14:37:12

标签: sql oracle datetime

我已经看到了一些类似于我的问题的答案,但我无法让它们起作用。我的查询中有几个日期字段,返回日期和时间,如7/1/2014 12:00:00 AM。有没有办法让字段显示7/1/2014?

SELECT DISTINCT
C.RECEIPTDATE,
(I.CLIENTID ||' - '||PO.CLIENTNAME) AS CLIENT,
D.INVOICEID,
D.SVCFROMDATE,
D.SVCTODATE,
D.SVCCODE
FROM M_EQP_ORDERS
WHERE.....

我基本上希望将两个日期字段缩减为较短的日期格式减去时间。

提前致谢!

6 个答案:

答案 0 :(得分:6)

使用to_char函数:

SELECT DISTINCT
to_char(C.RECEIPTDATE,'DD/MM/YYYY'),
(I.CLIENTID ||' - '||PO.CLIENTNAME) AS CLIENT,
D.INVOICEID,
D.SVCFROMDATE,
D.SVCTODATE,
D.SVCCODE
FROM M_EQP_ORDERS
WHERE.....

答案 1 :(得分:4)

只需使用TRUNC功能。

SELECT DISTINCT
TRUNC(C.RECEIPTDATE),
(I.CLIENTID ||' - '||PO.CLIENTNAME) AS CLIENT,
D.INVOICEID,
TRUNC(D.SVCFROMDATE),
TRUNC(D.SVCTODATE),
D.SVCCODE
FROM M_EQP_ORDERS
WHERE.....

答案 2 :(得分:1)

试试这个:

SQL> select to_char(sysdate, 'YYYY/MM/DD') dateonly, sysdate datetime from dual;

DATEONLY   DATETIME
---------- -------------------
2014/09/26 2014-09-26 15:41:03

答案 3 :(得分:1)

数据类型

DEPENDS

如果列是DATE数据类型,那么,正如已建议的那样,TRUNC将完成作业显示。但是,如果 区域设置特定的NLS日期设置 不同,那么您仍会将时间部分视为午夜。

否则,您需要使用TO_DATE FORMAT并使用TRUNC

<强> 更新

如果您只想显示,请使用TO_CHAR,否则,如果您的WHERE条款中有过滤器,请记住TO_CHAR不会返回{{1} },它将其转换为文字。

答案 4 :(得分:1)

SELECT DISTINCT
to_date(C.RECEIPTDATE,'DD/MM/YYYY'),
(I.CLIENTID ||' - '||PO.CLIENTNAME) AS CLIENT,
D.INVOICEID,
D.SVCFROMDATE,
D.SVCTODATE,
D.SVCCODE
FROM M_EQP_ORDERS
WHERE.....

答案 5 :(得分:0)

Oracle date数据类型始终包含时间。

TRUNC会将时间截断为午夜,如果要匹配两个日期时间的日期部分,则需要执行此操作。时间可能仍会显示,具体取决于客户端的配置方式,因此请使用带有适当格式掩码的TO_CHAR以任意方式显示它。