2013-05-14 46 views
10

下面的查询:提取日期只能从给定时间戳在Oracle SQL

select cdate from rprt where cdate <= TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS') and ryg='R' and cnum='C002'; 

回报:2013/04/27-10:06:26:794作为存储在表中。

我想仅将日期取为:27-04-2013并获取resul tdate和sysdate之间的天数。

+0

SELECT to_date(create_date,'DD-MM-YYYY')应该适合你。尝试一下 – ankurtr 2013-05-14 05:28:03

+0

'第1行出现错误: ORA-01861:文字不匹配格式字符串' 指向cdate。 – kumarprd 2013-05-14 05:34:03

+0

对不起。既然你已经有日期,你需要将它转换为字符。所以试试to_char(create_date,'DD-MM-YYYY')。它应该为你做好工作。 – ankurtr 2013-05-14 05:45:44

回答

8

这正是TO_DATE()用于:将时间戳转换为日期。使用TO_DATE(sysdate)代替TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS')

SQLFiddle demo

UPDATE

根据您的更新,你的cdate列不实DATETIMESTAMP类型,但VARCHAR2。使用字符串类型来保存日期并不是一个好主意。这是非常不方便和缓慢搜索,比较和日期做所有其他类型的数学。

您应该将您的cdateVARCHAR2字段转换为真正TIMESTAMP。假设没有其他用户对于这个领域,除了你的代码,你可以转换cdate为timestamp如下:

BEGIN TRANSACTION; 
-- add new temp field tdate: 
ALTER TABLE mytable ADD tdate TIMESTAMP; 
-- save cdate to tdate while converting it: 
UPDATE mytable SET tdate = to_date(cdate, 'YYYY-MM-DD HH24:MI:SS'); 

-- you may want to check contents of tdate before next step!!! 

-- drop old field 
ALTER TABLE mytable DROP COLUMN cdate; 
-- rename tdate to cdate: 
ALTER TABLE mytable RENAME COLUMN tdate TO cdate; 
COMMIT; 

SQLFiddle Demo

+0

它会抛出错误:'错误在第1行: ORA-01861:文字不匹配格式字符串' – kumarprd 2013-05-14 05:31:34

+0

那么,[SQLFiddle链接](http://www.sqlfiddle.com/#!4/d41d8/10899)工程罚款'sysdate'。是什么赋予了?你确定你在这里讲完整个故事吗? – mvp 2013-05-14 05:33:19

+0

'SELECT TO_DATE(CDATE, 'DD-MM-YYYY')从rprt其中CDATE <= TO_DATE(SYSDATE, 'DD-MM-YYYY')和RYG = 'R' 和CNUM = 'C002';'给我错误 – kumarprd 2013-05-14 05:43:54

1

尝试这种类型的格式:

SELECT to_char(sysdate,'dd-mm-rrrr') FROM dual 
1

转换时间戳记日期如下所述,这将肯定工作 -

select TO_DATE(TO_CHAR(TO_TIMESTAMP ('2015-04-15 18:00:22.000', 'YYYY-MM-DD HH24:MI:SS.FF'),'MM/DD/YYYY HH24:MI:SS'),'MM/DD/YYYY HH24:MI:SS') dt from dual 
0

此格式为我工作,对于所提到的日期格式即MM/DD/YYYY

SELECT to_char(query_date,'MM/DD/YYYY') as query_date 
FROM QMS_INVOICE_TABLE; 
+1

有了这个,你不是有个约会。你有一个Varchar2 – 2017-07-26 20:47:53

0

如果你想从你的时间戳列的值回来为日期数据类型,使用这样的:

select trunc(my_timestamp_column,'dd') as my_date_column from my_table;