Extrahieren Sie date nur von gegebenem timestempel in Oracle SQL

Die folgende Abfrage:

select cdate from rprt where cdate <= TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS') and ryg='R' and cnum='C002'; 

Rücksendung: 2013/04/27-10:06:26:794 wie in der Tabelle gespeichert.

Ich möchte das date nur als: 27-04-2013 und die Anzahl der Tage zwischen dem Ergebnis und sysdate erhalten.

Verwenden Sie die function cast (), um vom timestempel in das date zu konvertieren

 select to_char(cast(sysdate as date),'DD-MM-YYYY') from dual; 

Für weitere Informationen über die function caste oracle11g http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions016.htm#SQLRF51256

Genau dies ist TO_DATE() für: timestempel in date umwandeln.

Verwenden TO_DATE(sysdate) einfach TO_DATE(sysdate) anstelle von TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS') .

SQLFiddle-Demo

UPDATE :

Nach Ihrem Update ist Ihre cdate Spalte kein echter TIMESTAMP oder TIMESTAMP Typ, sondern VARCHAR2 . Es ist keine gute Idee, characterkettentypen zu verwenden, um data zu behalten. Es ist sehr unpraktisch und langsam zu suchen, zu vergleichen und alle anderen Arten von Mathe an data zu tun.

Sie sollten Ihr cdate VARCHAR2 Feld in echtes TIMESTAMP . Unter der Annahme, dass für dieses Feld außer Ihrem Code keine weiteren Benutzer vorhanden sind, können Sie cdate wie folgt in timestempel konvertieren:

 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

Probieren Sie diese Art von Format aus:

 SELECT to_char(sysdate,'dd-mm-rrrr') FROM dual 

timestempel zu date wie unten beschrieben konvertieren, es wird sicher funktionieren –

 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 

Dieses Format funktionierte für mich, für das erwähnte datesformat zB MM/DD/YYYY

 SELECT to_char(query_date,'MM/DD/YYYY') as query_date FROM QMS_INVOICE_TABLE; 

Wenn Sie möchten, dass der Wert aus Ihrer timestempelspalte als datesdatentyp zurückgegeben wird, verwenden Sie Folgendes:

 select trunc(my_timestamp_column,'dd') as my_date_column from my_table;