Oracle
 sql >> база данни >  >> RDS >> Oracle

сравнете датата в sql команда

Клейма за дата/час няма никакъв формат . Oracle не съхранява клеймото за дата/час във формата, който виждате. Форматът, който виждате, е само за дисплей предназначение. Датата се съхранява вътрешно в 7 байта, което е собственият формат на Oracle .

Разбира се, че бихте могли. Можете да използвате TRUNC което съкращава времевата част и оставя само датата, а типът данни остава като дата.

Например,

SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;

MY_TMSTMP
----------
2015-05-29

Така че получавате въведеното от потребителя в този формат като низ . Първо трябва да конвертирате го в DATE с помощта на TO_DATE и след това го сравнете.

Например,

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

Както вече казах, ако искате да игнорирате частта от времето, тогава приложете TRUNC .

Прилагайки обаче TRUNC в колоната за датаната ще потисне всеки нормален индекс на тази колона. От гледна точка на ефективността е по-добре да използвате условие за период от време .

Например,

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявка в база данни за търсене с използване на адрес

  2. SQL грешка:ORA-12899:стойността е твърде голяма за колона

  3. Събитие на изчакване:преоразмеряване на асинхронния дескриптор

  4. Мога ли да използвам многопоточност с DBI на Perl и Oracle?

  5. Как да се справя с кавички в SQL