下面的查询:提取日期只能从给定时间戳在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之间的天数。
下面的查询:提取日期只能从给定时间戳在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之间的天数。
这正是TO_DATE()
用于:将时间戳转换为日期。使用TO_DATE(sysdate)
代替TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS')
。
UPDATE:
根据您的更新,你的cdate
列不实DATE
或TIMESTAMP
类型,但VARCHAR2
。使用字符串类型来保存日期并不是一个好主意。这是非常不方便和缓慢搜索,比较和日期做所有其他类型的数学。
您应该将您的cdate
VARCHAR2
字段转换为真正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;
它会抛出错误:'错误在第1行: ORA-01861:文字不匹配格式字符串' – kumarprd 2013-05-14 05:31:34
那么,[SQLFiddle链接](http://www.sqlfiddle.com/#!4/d41d8/10899)工程罚款'sysdate'。是什么赋予了?你确定你在这里讲完整个故事吗? – mvp 2013-05-14 05:33:19
'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
尝试这种类型的格式:
SELECT to_char(sysdate,'dd-mm-rrrr') FROM dual
使用函数cast()将时间戳转换为日期
select to_char(cast(sysdate as date),'DD-MM-YYYY') from dual;
对于功能铸件的Oracle11g的更多信息http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions016.htm#SQLRF51256
转换时间戳记日期如下所述,这将肯定工作 -
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
此格式为我工作,对于所提到的日期格式即MM/DD/YYYY
SELECT to_char(query_date,'MM/DD/YYYY') as query_date
FROM QMS_INVOICE_TABLE;
有了这个,你不是有个约会。你有一个Varchar2 – 2017-07-26 20:47:53
如果你想从你的时间戳列的值回来为日期数据类型,使用这样的:
select trunc(my_timestamp_column,'dd') as my_date_column from my_table;
SELECT to_date(create_date,'DD-MM-YYYY')应该适合你。尝试一下 – ankurtr 2013-05-14 05:28:03
'第1行出现错误: ORA-01861:文字不匹配格式字符串' 指向cdate。 – kumarprd 2013-05-14 05:34:03
对不起。既然你已经有日期,你需要将它转换为字符。所以试试to_char(create_date,'DD-MM-YYYY')。它应该为你做好工作。 – ankurtr 2013-05-14 05:45:44