下面的查詢:提取日期只能從給定時間戳在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