以下查询:
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
并获取结果日期和系统日期之间的天数。
以下查询:
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
并获取结果日期和系统日期之间的天数。
使用函数 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')
.
更新:
根据您的更新,您的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;
在 Oracle 11g 中,要从时间戳中获取完整日期,请使用 -
Select TRUNC(timestamp) FROM TABLE_NAME;
要从时间戳中获取年份,请使用 -
Select EXTRACT(YEAR FROM TRUNC(timestamp)) from TABLE_NAME;
要从时间戳中获取月份,请使用 -
Select EXTRACT(MONTH FROM TRUNC(timestamp)) from TABLE_NAME;
要从时间戳中获取日期,请使用 -
Select EXTRACT(DAY FROM TRUNC(timestamp)) from TABLE_NAME;
试试这种格式:
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
如果您希望时间戳列中的值作为日期数据类型返回,请使用以下内容:
select trunc(my_timestamp_column,'dd') as my_date_column from my_table;
这种格式对我有用,对于提到的日期格式,即MM/DD/YYYY
SELECT to_char(query_date,'MM/DD/YYYY') as query_date
FROM QMS_INVOICE_TABLE;