2013-05-14 45 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;