Vergleichen Sie das date im SQL-Befehl

Meine database speichert das date als dieses Format 5/29/2015 12:07:58.000000 AM . Und ich habe die 5/29/2015 12:07:58 vom Benutzer als 5/29/2015 12:07:58 Format. Kann ich nur den Tag / Monat / Jahr anstelle der ganzen Zeile im SQL-Befehl vergleichen? Meine database ist Oracle und formatieren als TIMESTAMP. Hat jemand eine Idee, wie es geht?

Meine database speichert das date als dieses Format 5/29/2015 12: 07: 58.000000 AM

Nein. date / timestempel hat kein Format . Oracle speichert die dates- / timestempel nicht in dem angezeigten Format. Das angezeigte Format dient nur zur Anzeige . Das date wird intern in 7 Bytes gespeichert, was dem proprietären Format von Oracle entspricht .

Kann ich nur den Tag / Monat / Jahr anstelle der ganzen Zeile im SQL-Befehl vergleichen?

Natürlich könntest du. Sie könnten TRUNC verwenden, das den timeabschnitt abschneidet und nur den datesteil und den datatyp als date zurücklässt .

Beispielsweise,

 SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL; MY_TMSTMP ---------- 2015-05-29 

Und ich habe die dateseingabe vom Benutzer als 5/29/2015 12:07:58 Format.

So get die Benutzereingabe in diesem Format als characterfolge . Sie müssen es zuerst mit TO_DATE in DATE konvertieren und dann vergleichen.

Beispielsweise,

 WHERE TRUNC(dt_column) < TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') 

Wie bereits erwähnt, wenn Sie den timeabschnitt ignorieren möchten, wenden Sie TRUNC an .

Das Anwenden von TRUNC auf die datesspalte würde jedoch jeden regulären Index für diese Spalte unterdrücken. Verwenden Sie aus Sicht der performance besser eine datesbereichsbedingung .

Beispielsweise,

 WHERE dt_column BETWEEN TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') AND TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') +1 

Ich nehme an, Ihre Aufzeichnung in databaseen und Benutzereingabe ist beide Timestamp. Sie können die TRUNC-function verwenden, um das date dieses Werts abzurufen und zum Vergleich zu verwenden

declare v_tsdate DATE; v_txdate DATE; begin v_tsdate := TRUNC( CAST('5/29/2015 12:07:58.000000 AM' as DATE) ); v_txdate := TRUNC( CAST('5/29/2015 12:07:58' as DATE) ); --do the comparision and conditions you need with v_tsdate and v_txdate end;

Der Grund, warum ich in das Format DATE konvertiere, weil TRUNCT(Timestamp) theoretisch TRUNC(CAST(Timestamp AS DATE))