下面的查询:
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之间的天数。
下面的查询:
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之间的天数。
使用函数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
这正是TO_DATE()
是:以时间戳转换为日期。
只要使用TO_DATE(sysdate)
,而不是TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS')
。
SQLFiddle演示
更新 :
根据您的更新,你的cdate
列是不是真正的DATE
或TIMESTAMP
类型,但VARCHAR2
。 它不使用字符串类型保持日期很不错的主意。 这是非常不方便和缓慢进行搜索,比较和做所有其他类型的数学上的日期。
您应该将转换cdate
VARCHAR2
场转化为现实TIMESTAMP
。 假设没有其他用户对于这个领域,除了你的代码,你可以转换cdate
以时间戳如下:
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演示
尝试这种类型的格式:
SELECT to_char(sysdate,'dd-mm-rrrr') FROM dual
转换时间戳记日期如下所述,这将肯定工作 -
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;
如果你想从你的时间戳列的值回来为日期数据类型,使用这样的:
select trunc(my_timestamp_column,'dd') as my_date_column from my_table;